实体框架核心中的重用记录

时间:2018-07-02 20:08:14

标签: c# entity-framework entity-framework-core

我遇到了一个问题,其中EF试图重复插入同一模型实例的记录。下面有更多详细信息。

数据模型:

public class PostDataModel
{
    public int Id { get; set; }
    public string Content { get; set; }
    public AccountDataModel Author { get; set; }
}

public class AccountDataModel
{
    public int Id { get; set; }
    public string Login { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }
}

因此,首先,我创建一个帐户并将其存储:

var account = new AccountDataModel() {
    Login = "Test",
    FirstName = "John",
    LastName = "Smith"
};

// Store new account
_dbContext.Accounts.Add(account);
_dbContext.SaveChanges();

然后,我要存储该帖子,并在我的PostDataModel中为author属性使用相同的帐户模型实例。

// Store post
_dbContext.Posts.Add(new PostDataModel() {
    Content = "Lorem ipsum dolor...",
    Author = account // Here is my problem
});

_dbContext.SaveChanges(); // 'UNIQUE constraint failed: Accounts.Id'.

我的问题是,当存储帖子时,我拥有用于​​存储帐户的Author属性是相同的account实例,那么EF试图将我的帐户存储两次(并且由于有一个唯一的约束集,会引发错误。

那是为什么?如何将帖子作者正确链接到先前存储的AccountDataModel实例?

1 个答案:

答案 0 :(得分:-1)

我认为您应该这样做:

_dbContext.Posts.Add(new PostDataModel() {
    Content = "Lorem ipsum dolor...",
    Author = new AccountDataModel() {
    Login = "Test",
    FirstName = "John",
    LastName = "Smith"
}});

_dbContext.SaveChanges();