C# 如何为实体框架上的现有属性设置空值

C# 如何为实体框架上的现有属性设置空值,c#,entity-framework,dbcontext,C#,Entity Framework,Dbcontext,场景: 我有一个实体,它的(可空)FKId不再需要了 问题: 当我在上下文中更新此实体时,将NULL设置为FK,在SaveChanges()之后,该值不会保留在数据库中 有什么想法吗 编辑#1: 在SaveChanges之后,我检查了基数并继续使用旧值,如果我更改为其他值,则可以正常工作 类别: public class Account { [Required] public int Id { get; set; } public int? PlanId { get;

场景:
我有一个实体,它的(可空)FK
Id
不再需要了

问题:
当我在上下文中更新此实体时,将
NULL
设置为FK,在
SaveChanges()
之后,该值不会保留在数据库中

有什么想法吗

编辑#1:
SaveChanges
之后,我检查了基数并继续使用旧值,如果我更改为其他值,则可以正常工作

类别:

public class Account
{
    [Required]
    public int Id { get; set; }

    public int? PlanId { get; set; }

    [Required]
    public virtual Status Status { get; set; }

    #region Navigations Properties

    public virtual Plan Plan { get; set; }

    #endregion
}
用法:(问题)

Account ent=Context.Set().AsQueryable().FirstOrDefault(x=>x.Id=Id);
ent.PlanId=null;
SaveChanges();
编辑[问题解决]

有必要发送一个数组,其中的字段将作为新值变为null

public virtual void Update(TEntity entityToUpdate, List<string> updateNullFields)
{
    DbSet.Attach(entityToUpdate);
    foreach (var item in updateNullFields)
    {
        Context.Entry(entityToUpdate).Property(item).IsModified = true;
    }
}
公共虚拟无效更新(TEntity entityToUpdate,List updateNullFields)
{
数据库集附加(实体更新);
foreach(updateNullFields中的变量项)
{
Context.Entry(entityToUpdate).Property(item).IsModified=true;
}
}

我认为您很可能没有更新数据库本身。 使用以下代码更新数据库后:

ALTER TABLE [table_name] ALTER COLUMN [fk_column] [datatype] NULL
在.edmx文件上运行“从数据库更新模型”。

确保此值为Nullable=true

如果不保存更改,任何更改都不会影响数据库。您是否在不更改数据库的情况下使类中的FK为空?我将更新帖子以提供更多信息。这是哪个EF版本?EF6有完全相同的问题,无法理解原因。有趣的是,如果在保存更改之前,我在即时窗口中将null分配给属性,那么属性将正确设置为null。我正在使用迁移来维护数据库,而FK已经可以为null了。。。问题在于EF在属性具有任何非空值之后,不在db上保留空值。这是在保存还是编辑操作上?您应该检查实体状态,以确保在插入/更新对象之前对其进行了修改。我必须传递这些字段,以强制为空值,将其设置为
IsModified=true在我附加之后。`数据库集附加(实体更新);foreach(updateNullFields中的var项){Context.Entry(entityToUpdate.Property(item.IsModified=true;}`
ALTER TABLE [table_name] ALTER COLUMN [fk_column] [datatype] NULL