编辑实体时无法轻松地将属性设置为Null

时间:2019-04-04 02:08:45

标签: c# asp.net-core entity-framework-6

在带有EF6的asp.net核心应用程序中,我很难设置属性为Null。例如:

public Class A { public int Id {get; set;} public virtual B B{ get;set; } }
public Class B { public int Id {get; set;} }

//in edit method in controller:

var db_a = dbContext.A_entities
.Include(x => x.B) //if this line isn't there, then setting to null doesn't work
.Single(x => x.Id == form_a.Id);
if (form_a.B == null) {
 db_a.B = null; //this doesn't save to db unless we use .Include() above.
}

//...

dbContext.SaveChanges();

在上面,如果我有10个属性,或者B恰好具有某些属性,则对每个属性使用.include会很麻烦。有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

您正在通过A使用外键(关系)到达B,EF会进行延迟加载,实际上不会使用{{1}来为每个B加载所有A }使其急于加载Include,以便它实际加载,您可以设置其值。

但是,如果您不需要B而只想将其A的值设置为null,则可以执行以下操作:

B

答案 1 :(得分:0)

如果要删除A和B之间的关系,可以尝试在A之类的外键中定义

public class A
{
    public int Id { get; set; }
    public string AName { get; set; }
    public int? BId { get; set; }
    public virtual B B { get; set; }
}

然后,在删除关系时,只需将BId设置为空

var a = _context.A.FirstOrDefault();
a.BId = null;
_context.SaveChanges();