2017-03-29 114 views
-1

此时正面临EF的一个奇怪问题。我有一个数据库表nvarchar(MAX)数据类型,并且是一个可空字段。当我给这个字段赋值为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; 
      } 

     } 

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

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

对不起,打扰你们all.I新来这种先进的逻辑,这让我卡住了。

+3

请发表您使用更新财产的实际代码。 –

+0

@ChrisPickford我已经添加了代码。它是一个简单的更新和保存。 – Vick

+1

是'dbcontext.update();'一个自定义方法吗?它有什么作用? –

回答

0

试着这样做:

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

你说得对。问题与你提到的一样。我也编辑了我的问题。 – Vick