全局覆盖Linq to SQL以将对象字符串保存为空字符串而不是NULL

时间:2013-11-11 20:43:47

标签: c# sql linq linq-to-sql

当保存具有尚未显式设置为空字符串的字符串属性的对象时,LINQ to SQL将尝试使用NULL值插入此记录。

我会同意这是它应该如何运作的。但是对于我写的特定数据库,我想全局覆盖此功能以始终保存空字符串。

这可能吗?

1 个答案:

答案 0 :(得分:4)

你需要这样的东西:

public partial class NorthwindDataContext
{
    public override void SubmitChanges(ConflictMode failureMode)
    {
        this.EmptyNullProperties();

        base.SubmitChanges(failureMode);
    }

    private void EmptyNullProperties()
    {
        var propertiesToEmpty =
            from entity in this.GetChangeSet().Inserts
            from property in entity.GetType().GetProperties()
            where property.CanRead && property.CanWrite
            where property.PropertyType == typeof(string)
            where property.GetValue(entity) == null
            select new { entity, property };

        foreach (var pair in propertiesToEmpty)
        {
            pair.property.SetValue(pair.entity, string.Empty);
        }
    }
}