目前面对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。
很想听听专家对此的看法。
很抱歉打扰你们。我是这种先进逻辑的新手,这让我陷入困境。
答案 0 :(得分:0)
尝试这样做:
myobject.field1 = null;
dbcontext.Entry(myobject).Property(x => x.field1).IsModified = true;
dbcontext.saveChanges()