【发布时间】:2018-12-03 03:07:30
【问题描述】:
我有一个 DAO 类,用于更新从客户端应用接收到的实体。所以我将实体附加到上下文中,但是如果在客户端将相关实体设置为null,则保存后数据库中的foreingn键未设置为null,然后当我查询实体时,相关实体仍然存在。
在这种情况下如何删除外键? (我不能手动检查每个属性,因为模型太大)
编辑:当我在 dbcontext 中查询实体时它工作正常,问题是当实体在客户端被修改然后附加到 dbcontext。
这是一个例子:当我在 Address 表中设置person.Address.Neighborhood = null; NeighborhoodId 属性still 7。
var person = new Person
{
Id = 1,
Name = "Juan",
Adress = new Address
{
Id = 3,
StreetName = "Calle Falsa",
StreetNumber = "123",
Neighborhood = new Neighborhood
{
Id = 7,
Description = "my Neighborhood"
},
}
};
person.Address.Neighborhood = null;
_context.Attach(person);
_context.Entry(person).State = EntityState.Modified;
var unchange = _context.ChangeTracker.Entries().Where(e => e.State == EntityState.Unchanged).ToList();
if (unchange != null && unchange.Count > 0)
{
foreach (var unaEntidad in unchange )
{
_context.Entry(unaEntidad.Entity).State = EntityState.Modified;
}
}
_context.SaveChanges();
编辑:类:
public class Person
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public virtual int Id { get; set; }
public virtual string StreetName { get; set; }
public virtual string StreetNumber { get; set; }
public virtual Neighborhood Neighborhood { get; set; }
}
public class Neighborhood
{
public virtual int Id { get; set; }
public virtual string Description { get; set; }
}
【问题讨论】:
-
那么您是要删除关系
only还是删除entity从而删除关系? -
仅关系
-
您可以编辑您的帖子以显示
Person和Neigbourhood的课程吗? -
我已经编辑了问题。
-
为什么是 AddressId 个人?
标签: c# entity-framework ef-core-2.0 ef-core-2.1