在我的带有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恰好具有某些属性,那么使用它会变得很麻烦。包括每个属性。有一个更好的方法吗?
你通过A使用外键(关系)到达B
,EF做了延迟加载并且实际上没有为每个B
加载所有A
,使用Include
告诉它急切加载B
所以它实际加载并且你可以设置它的值。
但是,如果你不需要A
并且只想将其B
值设置为null,请执行以下操作:
var b = dbContext.A_entities.SingleOrDefault(x => x.Id == form_a.Id)?.B;
if (form_a.B == null) b = null;
如果要删除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
设置为null
var a = _context.A.FirstOrDefault();
a.BId = null;
_context.SaveChanges();