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

问题描述 投票:0回答:2

在我的带有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恰好具有某些属性,那么使用它会变得很麻烦。包括每个属性。有一个更好的方法吗?

c# asp.net-core entity-framework-6
2个回答
0
投票

你通过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; 

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设置为null

var a = _context.A.FirstOrDefault();
a.BId = null;
_context.SaveChanges();
© www.soinside.com 2019 - 2024. All rights reserved.