在带有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会很麻烦。有更好的方法吗?
答案 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();