如何在涉及1对多关系的实体上调用SaveChanges?

时间:2014-01-11 00:26:55

标签: entity-framework

这是我的实体

public class Article
{
    public Article()
    {
       Associations = new List<Association>();
    }
    public int Id { get; set; }
    public string Title { get; set; }
    public string Body { get; set; }

    public List<association> Associations { get; set; }
}

public class Association
{
    public int Id { get; set; }
    public int ArticleId { get; set; }
    public int KeywordId { get; set; }
    public bool IsSubject { get; set; }

    public Article Article { get; set; }
    public Keyword Keyword { get; set; }
}

public class Keyword 
{
    public Keyword()
    {
        Associations = new List<Association>();
    }
    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }

    public List<Association> Associations { get; set; }
}

在这种情况下,我已经知道KeywordId但我还不知道ArticleId。我想知道可以保存两个实体并只调用一次SaveChanges。

修改

这是来自用户的内容

public class ArticleViewModel
{
    public int Id { get; set; }
    public string Title { get; set; }
    public string Description { get; set; }
    public string Body { get; set; }
    public int KeywordId { get; set; }
}

感谢您的帮助

2 个答案:

答案 0 :(得分:1)

我假设您问这个,因为您想要创建一个包含已知关键字的新文章。您可以设置KeywordIdArticle

var article = new Article
              {
                  Title = viewModel.Title,
                  Body  = viewModel.Body
              };
var association = new Association
                  {
                      Article = article,
                      KeywordId = viewModel.KeywordId
                      // other properties
                  };

db.Associations.Add(association);
db.SaveChanges();

EF将首先保存Article,并将生成的Id用于Association的插入语句。

答案 1 :(得分:0)

您不需要public int ContentId { get; set; }public int KeywordId { get; set; }并且可以保存所有已更改的内容,如果您从数据库中提取所有这些对象并为其分配道具相同的使用语句(正确的方法)或附加对象(常见但更危险的方式)