无法使用Null更新Nullable字段

时间:2017-03-29 11:00:42

标签: c# entity-framework

目前面对EF的一个奇怪问题。我在数据库中有一个带有 nvarchar(MAX)数据类型的表,并且是可空字段。在为此字段分配null时更新表中的条目时,不保存该null,而是保持旧值不变。但保存空字符串是有效的。 我的代码看起来像这样,

myobject.field1 = null; // assigning **null** here.
dbcontext.update();
dbcontext.saveChanges();

任何解决方案或指导都将非常感激。

我尝试了什么:

UseCSharpNullComparisonBehavior 

UseDatabaseNullSemantics

编辑:

找到了罪魁祸首,我们的应用程序已经实现了工作单元和存储库,我们有一个基本存储库,其中包含如下所示的更新方法,

public virtual void Update(T entity)
        {

            //Ensure only modified fields are updated.
            _dbEntities.Set<T>().Attach(entity);
            var dbEntityEntry = _dbEntities.Entry<T>(entity);
            foreach (var property in dbEntityEntry.OriginalValues.PropertyNames)
            {               
                var current = dbEntityEntry.CurrentValues.GetValue<object>(property);
                if (current != null)
                    dbEntityEntry.Property(property).IsModified = true;
            }   

        }

在此函数中,在null情况下限制更新。虽然在我看来这个逻辑是无效的,因为如果用户想要的话,它不会让用户将现有值更改为null。

很想听听专家对此的看法。

很抱歉打扰你们。我是这种先进逻辑的新手,这让我陷入困境。

1 个答案:

答案 0 :(得分:0)

尝试这样做:

myobject.field1 = null;
dbcontext.Entry(myobject).Property(x => x.field1).IsModified = true;
dbcontext.saveChanges()