2012-02-15 9 views
0

標準のASP.NET 4 Dynamic Dataサイト(LinqからSQLへ)を使用しています。asp.net dynamic-dataで空の文字列がNULLにならないようにする

私のSQLサーバデータベースには、何百ものvarcharフィールドがあり、NOT NULLに設定されていますが、空の文字列のデフォルト値があります。それらは決してNULLであるべきではありませんが、内容として空文字列を持つかもしれません。

動的データサイトでこれらのフィールドを編集すると、内部ロジックはフィールドをNOT NULLと見なし、TextBox1.Text(空の文字列)の間にあり、UPDATE sqlを呼び出すとNULLに値を設定して更新します失敗する。

私は、System.Web.DynamicData.MetaColumnが 'ConvertEmptyStringToNull'プロパティを持っているのを見ることができますが、読み取り専用です。

空の文字列が何百ものフィールドのプロパティを変更することなくNULLにならないようにするにはどうすればよいですか?

答えて

0

でFieldTemplates/Text_Edit.ascx.csは、それらが送信されることからフォームを防ぐため、最初 バリを除去する、文字列の動作を変更

protected void Page_Load(object sender, EventArgs e) { 
    TextBox1.MaxLength = Column.MaxLength; 
    if (Column.MaxLength < 20) 
     TextBox1.Columns = Column.MaxLength; 
    TextBox1.ToolTip = Column.Description; 

    if (Column.IsString) 
    { 
     this.Controls.Remove(RequiredFieldValidator1); 
     this.Controls.Remove(RegularExpressionValidator1); 
     this.Controls.Remove(DynamicValidator1); 
    } 
    else 
    { 
     SetUpValidator(RequiredFieldValidator1); 
     SetUpValidator(RegularExpressionValidator1); 
     SetUpValidator(DynamicValidator1); 
    } 
} 

空の文字列を変換するコードの一部NULLがConvertEditedValue方法のどこかにあると、その文字列のためにそれをスキップ:

protected override void ExtractValues(IOrderedDictionary dictionary) 
{ 
    if (Column.IsString) 
    { 
     dictionary[Column.Name] = TextBox1.Text; 
    } 
    else 
    { 
     dictionary[Column.Name] = ConvertEditedValue(TextBox1.Text); 
    } 
} 

は今、あなたは空の文字列を持つテーブルを更新することができ、もちろん問題は今、あなたがCデフォルト値を持つものだけでなく、すべてのvarcharフィールドの空の文字列を設定します。

SQL-Serverのデフォルト値について知ることができるLinq to SQLまたはEFデータモデルのどこにも表示されません。プロパティDefaultValueがありますが、常にNULLです。

0

データベースを呼び出すための手順は1つありますか?
ここでフィールドの値を確認するか、空白の文字列を各値に追加するだけです。

+0

ダイナミックサイトの使い方独自のSQLを生成したので、私はそれを制御できませんか? –

+0

ああ、申し訳ありません - LINQ2SQL - 私はそこに助けることができません!私はより慎重に質問を読む必要があります:( – CompanyDroneFromSector7G

0

あなたは、データベース内のデフォルト値(空の文字列)を設定し、アプリケーションでデータベースの初期設定をデフォルトに問題の列にメタデータを使用することを検討していないことを望むので:

[Column(IsDbGenerated = true, UpdateCheck = UpdateCheck.Never, AutoSync=AutoSync.Never)] 
public object MyColumn { get; set; } 
関連する問題