我有两个表具有多对多关系,如下所示:
用户(电子邮件地址,姓名)
UserAlerts(电子邮件地址, AlertId )
警报(的 AlertId 下,标题)
警报已添加到数据库中。插入新用户时,我正在对AlertRepository
进行查找。问题是,它不是仅在用户和 UsertAlerts 表中创建记录,而是还添加了额外的警告记录。
我使用以下代码:
public ActionResult Register(UserModel model, int[] Alerts)
User user = new MidTier.Models.User();
user.Name = model.Name;
user.EmailAddress = model.EmailAddress;
if (Alerts!=null)
{
IRepository<Alert> alertRepository = new AlertRepository();
foreach (int alertId in Alerts)
{
Alert alert = alertRepository.First(a=>a.ID== alertId);
alertRepository.Detach(alert);
if (alert != null)
{
alert.Enabled = true;
user.Alerts.Add(alert);
}
}
}
userRepository.Attach(user);
userRepository.Add(user);
userRepository.Save();
答案 0 :(得分:0)
在提问之前,为什么不尝试搜索一下?每周多次询问此问题。在您之前的问题中,我说过您应该使用相同的上下文来加载Alert
和存储User
。你没有做到并且整个情况复杂化。
上下文对警报的存在一无所知。为用户致电Add
后,它将添加尚未跟踪的所有实体。有三种方法可以解决这个问题:
Alert
附加到新上下文,然后再将其添加到User
。将EF代码封装到存储库时很难做到。Alert
添加到User
之前不会将Add
附加到新上下文,则必须修改User
User
方法在将Unchanged
添加到上下文后,您必须迭代每个警报并将其状态更改为{{1}}。