POCO,实体插入错误的多对多关系

时间:2011-03-17 16:48:37

标签: c# entity-framework poco

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

我的桌子很小。

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>();
    }
}

1 个答案:

答案 0 :(得分:0)

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