无法更新为空的空字段
问题描述:
此时正面临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新来这种先进的逻辑,这让我卡住了。
答
试着这样做:
myobject.field1 = null;
dbcontext.Entry(myobject).Property(x => x.field1).IsModified = true;
dbcontext.saveChanges()
+0
你说得对。问题与你提到的一样。我也编辑了我的问题。 – Vick
请发表您使用更新财产的实际代码。 –
@ChrisPickford我已经添加了代码。它是一个简单的更新和保存。 – Vick
是'dbcontext.update();'一个自定义方法吗?它有什么作用? –