【发布时间】:2012-04-08 01:48:03
【问题描述】:
public class User
{
public int Id{ get; set; }
public ICollection<UserAction> UserActions{ get; set; }
public string Name{ get; set; }
}
public class Action
{
public int Id{ get; set; }
public string Name{ get; set; }
public ICollection<UserAction> UserActions{ get; set; }
}
public UserAction
{
public int Id{ get; set; }
public User User{ get; set; }
public Action Action{ get; set; }
public int Type {get;set}
}
在存储库类中
public void Update(User user,List<UserAction> actions)
{
User entity = this.GetUser(user.Id);
entity.UserActions.Clear();
entity.UserActions= actions;
this.siteRepository.Update<SiteUser>(user);
this.siteRepository.UnitOfWork.SaveChanges();
}
我在下面遇到错误,例如
操作失败:无法更改关系,因为一个或多个外键属性不可为空。当对关系进行更改时,相关的外键属性将设置为空值。如果外键不支持空值,则必须定义新关系,必须为外键属性分配另一个非空值,或者必须删除不相关的对象。
【问题讨论】:
-
不清楚你在问什么。更新应该做什么?您传入的 UserAction 实例是否已经具有要更改的用户和与之关联的操作?你能解释一下你想做什么,而不仅仅是发布代码吗?
-
你知道 EF 的多对多关系吗?就是这样。
-
您在示例中所拥有的并不是 EF 认为的多对多关系,因为您已经映射了连接表。映射连接表很好。但是你想做什么?
-
映射很好但是,我没有删除联结表数据,通常如果联结表中没有Type属性,它很容易。
-
您得到的异常表明您有一个 FK 映射到某个属性。我在您发布的任何代码中都没有看到 FK 映射。您能否更新包含 FK 属性的代码或在代码中指出您已将哪个属性映射到 FK?
标签: c# .net entity-framework entity-framework-4.3