0

標準の ASP.NET 4 動的データ サイトがあります (Linq to SQL を使用)。

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

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

System.Web.DynamicData.MetaColumn にはプロパティ 'ConvertEmptyStringToNull' がありますが、読み取り専用です。

何百ものフィールドすべてのプロパティを変更せずに、空の文字列が NULL になるのを防ぐにはどうすればよいですか?

4

3 に答える 3

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);
    }
}

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

Linq to SQLまたはEFデータモデルのどこにも、SQL-Serverのデフォルト値を確認できる場所がありません。DefaultValueプロパティがありますが、常にNULLです。

于 2012-02-17T20:47:25.490 に答える
0

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

[Column(IsDbGenerated = true, UpdateCheck = UpdateCheck.Never, AutoSync=AutoSync.Never)]
public object MyColumn { get; set; }
于 2012-05-16T18:04:46.117 に答える
0

データベースを呼び出すための単一の手順はありますか?
その場合は、ここでフィールドの値を確認するか、各値に空白の文字列を追加してください。

于 2012-02-15T11:23:40.110 に答える