0

我是 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; 

应该删除相关的地址(数据库中的记录),但事实并非如此!它仅删除用户表中的外键。另外,当我分配一个新地址时:

user.Address = new Address() { ... }; 

它在数据库中创建了第二条记录,为什么?

我想:

  1. 如果将 null 分配给user.Address数据库记录,则应删除

  2. 如果为其分配一个新的地址对象,user.Address则应将现有记录数据替换为新的

我该如何解决这个问题?

4

1 回答 1

1

如果您需要删除一个实体,您需要将其标记为已删除。将导航属性设置为 null 不会删除相关实体。请注意,可能有许多导航属性(不同的实体)指向相关实体,并且它们都会在您描述的场景中受到影响。因为您创建了一个新地址,所以创建了一个新实体。然后将导航属性设置为新创建的属性,这会打破旧关系并创建新关系。由于您创建的实体不在数据库中,它将被添加。您也没有删除旧实体,因此它没有从数据库中删除。如果您只想更改实体的属性值,只需将属性设置为新值并调用 SaveChanges。这应该更新数据库中的数据。

于 2012-10-14T20:36:48.577 回答