我试图使用EF 4.1 Code First来建模具有单个角色的用户的简单关系.当我尝试将具有新角色的现有用户保存到不同的上下文(使用不同的上下文来模拟客户端 - 服务器往返)时,我得到以下异常:
System.Data.Entity.Infrastructure.DbUpdateException:保存不公开其关系的外键属性的实体时发生错误.EntityEntries属性将返回null,因为无法将单个实体标识为异常的来源.通过在实体类型中公开外键属性,可以更轻松地在保存时处理异常.有关详细信息,请参阅InnerException.---> System.Data.UpdateException:来自'User_CurrentRole'AssocSet的关系处于'已添加'状态.给定多重约束,相应的'User_CurrentRole_Source'也必须处于'已添加'状态.
我期望创建一个新角色并与现有用户相关联.
我做错了什么,这有可能首先在EF 4.1代码中实现吗?错误消息似乎表明它需要用户和角色都处于添加状态,但我正在修改一个exising用户,那怎么可能呢?
注意事项:我想避免修改实体的结构(例如,通过引入实体上可见的外键属性),并且在数据库中我希望用户有一个指向Role的外键(不是其他方式).我也不准备转移到自我跟踪实体(除非没有别的办法).
以下是实体:
public class User
{
public int UserId { get; set; }
public string Name { get; set; }
public Role CurrentRole { get; set; }
}
public class Role
{
public int RoleId { get; set; }
public string Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是我正在使用的映射:
public class UserRolesContext : DbContext
{
public DbSet<User> Users { get; set; }
public DbSet<Role> Roles { get; set; …Run Code Online (Sandbox Code Playgroud)