如何将null值设置为Entity Framework上的现有属性

时间:2016-05-05 18:50:00

标签: c# entity-framework dbcontext

情境:
我有一个具有(可空)FK Id的实体,不再需要它了。

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

有什么想法吗?

编辑#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<Account>().AsQueryable().FirstOrDefault(x => x.Id = id);
ent.PlanId = null;
Context.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;
    }
}

1 个答案:

答案 0 :(得分:1)

我会说你很可能没有更新数据库本身。 使用以下代码更新数据库后:

ALTER TABLE [table_name] ALTER COLUMN [fk_column] [datatype] NULL

在.edmx文件上运行'从数据库更新模型'。 in the docs

确保此Nullable = true enter image description here