小编Ily*_*lev的帖子

在EF 4.1 Code First中将分离的实体添加到1-many关系中

我试图使用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)

c# entity-framework entity-framework-4 ef-code-first

4
推荐指数
1
解决办法
6860
查看次数