我是EF Code First的新手并且遇到了一些麻烦。
public class User
{
public string Id { get; set; }
public string Name { get; set; }
public virtual Address Address { get; set; }
}
public class Address
{
public string Id { get; set; }
public string Street { get; set; }
public string Nr { get; set; }
}
我想要的是,如果我写下面的代码:
user.Address = null;
应删除相关地址(数据库中的记录),但不是!它仅删除Users表中的外键。当我分配一个新地址时:
user.Address = new Address() { ... };
它在数据库中创建了第二条记录,为什么?
我想:
如果将null赋值给user.Address
,则应删除数据库记录
如果将新的地址对象分配给user.Address
,则应将现有记录数据替换为新的
我该如何解决这个问题?
答案 0 :(得分:1)
如果您需要删除实体,则需要将其标记为已删除。将导航属性设置为null不会删除相关实体。请注意,可能有许多指向相关实体的导航属性(不同实体),并且它们都会在您描述的场景中受到影响。 因为您创建了新地址,所以会创建一个新实体。然后将导航属性设置为新创建的属性,这会破坏旧关系并创建一个新关系。由于您创建的实体不在数据库中,因此将添加该实体。您也没有删除旧实体,因此未从数据库中删除它。如果您只想更改实体的属性值,只需将属性设置为新值并调用SaveChanges。这应该更新数据库中的数据。