这是我的实体
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; }
}
感谢您的帮助
答案 0 :(得分:1)
我假设您问这个,因为您想要创建一个包含已知关键字的新文章。您可以设置KeywordId
和Article
:
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; }
并且可以保存所有已更改的内容,如果您从数据库中提取所有这些对象并为其分配道具相同的使用语句(正确的方法)或附加对象(常见但更危险的方式)