我必须代表Message
和Topic
的实体
Message
可以有多个Topic
,而Topic
可以属于多个Message
public class Message
{
[Key]
public int Id { get; set; }
public string Text { get; set; }
public virtual ICollection<Message> Topics { get; set; }
}
public class Topic
{
public int Id { get; set; }
public string Value { get; set; }
public virtual ICollection<Message> Messages { get; set; }
}
在我的应用程序中,我们首先保存Topic
(在应用程序的早期,有时是种子数据等...)
稍后,我需要保存一个新的Message
- 将已存在的Topic
添加到子集合中;
var message = new Message();
message.Text = "Hello";
//this topic already exists in the database
message.Topics.Add(new Topic{Id = 6, Value = "val"});
dbContext.Messages.Add(message);
dbContext.SaveChanges();
会发生什么:
Message
已保存Message
ID 我想要发生的是
Message
已保存Message
ID 答案 0 :(得分:1)
如果所有内容都已正确映射,那么您唯一需要做的就是持有对主题的引用并将其状态设置为Unchanged
:
// This topic already exists in the database.
// No need to set value.
var topic = new Topic{ Id = 6 };
var message = new Message();
message.Text = "Hello";
message.Topics.Add(topic);
dbContext.Messages.Add(message);
// Set state of topic to Unchanged
dbContext.Entry(topic).State = EntityState.Unchanged;
dbContext.SaveChanges();
如果没有太多数据,只需从数据库中获取主题。
// Get topic from source
var topic = dbContext.Topics.FirstOrDefault(m => m.Id == 6);
var message = new Message();
message.Text = "Hello";
message.Topics.Add(topic);
dbContext.Messages.Add(message);
dbContext.SaveChanges();