如何将空值设置为 Entity Framework 上的现有属性
How to set null value to an existing attribute on Entity Framework
场景:
我有一个带有(可为空的)FK Id
的实体,它不再需要了。
问题:
当我在上下文中更新此实体时,将 NULL
设置为 FK,在 SaveChanges()
之后,该值不会保留在数据库中。
有什么想法吗?
编辑#1:
在 SaveChanges
之后,我检查了基数并继续使用旧值,如果我更改为其他值也可以正常工作。
Class:
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;
}
}
我会说你很可能没有更新数据库本身。
使用此代码更新数据库后:
ALTER TABLE [table_name] ALTER COLUMN [fk_column] [datatype] NULL
运行 'Update Model from Database' 在 .edmx 文件上。
确保这个 Nullable = true
场景:
我有一个带有(可为空的)FK Id
的实体,它不再需要了。
问题:
当我在上下文中更新此实体时,将 NULL
设置为 FK,在 SaveChanges()
之后,该值不会保留在数据库中。
有什么想法吗?
编辑#1:
在 SaveChanges
之后,我检查了基数并继续使用旧值,如果我更改为其他值也可以正常工作。
Class:
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;
}
}
我会说你很可能没有更新数据库本身。 使用此代码更新数据库后:
ALTER TABLE [table_name] ALTER COLUMN [fk_column] [datatype] NULL
运行 'Update Model from Database' 在 .edmx 文件上。
确保这个 Nullable = true