【问题标题】:POCO, Entity Insert Error in many to many relationPOCO,多对多关系中的实体插入错误
【发布时间】:2011-03-17 16:48:36
【问题描述】:

我有一个小问题。当我将一个新项目添加到我的数据库(EF)中时,我有一个 UpdateEception:无法更新 EntitySet 'UserRoles',因为它有一个 DefiningQuery 并且元素中不存在支持当前操作的元素。 em>

我有一张很小的桌子。

Users : 

- [PK] UserID
- Login
- Password
- Email
- IsActive

Roles :
- [PK] RoleID
- Name

UserRoles :
- [FK] UserID
- [FK] RoleID

获取方法

User u = db.Users.Single(x => x.Login == "scott");

工作正常,但不能插入:/ 我尝试了很多方法。我尝试将 PK 添加到 UserRoles,它可以工作,但不会像现在这样。关系将是多 -> 一 -> 多,而不是多对多,我必须有一个额外的类。我不知道如何解决这个问题。

我的实体类太简单了。角色类中的列表和用户类中的列表是虚拟的。

public class TestDBEntity : ObjectContext
{
    public ObjectSet<Role> Roles { get; set; }
    public ObjectSet<User> Users { get; set; }

    public TestDBEntity()
        : base("name=TestDBEntities", "TestDBEntities")
    {
        ContextOptions.LazyLoadingEnabled = true;

        this.Roles = CreateObjectSet<Role>();
        this.Users = CreateObjectSet<User>();
    }
}

【问题讨论】:

  • 你能发布你的代码吗?也许 EDM 也是如此 - 它可以帮助发现问题。

标签: c# entity-framework poco


【解决方案1】:

您必须在 UserRoles 表中创建复合键 (UserID, RoleID)。没有其他方法,因为没有定义主键,表被映射为只读视图。它仍然会为多对多关系建模,但您可能必须首先从模型中删除实体,然后通过从数据库更新再次添加它们。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    相关资源
    最近更新 更多