【问题标题】:EF4 CTP5 Database First + Many-To-Many Relation (Error)EF4 CTP5 数据库优先 + 多对多关系(错误)
【发布时间】:2011-10-27 01:23:46
【问题描述】:

我很确定这与隐藏约定有关,但在尝试将多对多关系映射到现有数据库时总是出错。 这是最简单的例子:

[Table("ALRole", SchemaName = "AL")]
public class Role
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<User> Users { get; set; }
}

[Table("ALUser", SchemaName = "AL")]
public class User
{
    public int ID { get; set; }
    public string Name { get; set; }
    public virtual ICollection<Role> Roles { get; set; }
}

我在db中得到了通常的三个表:前两个很明显,第三个是用这个脚本创建的:

CREATE TABLE AL.ALUsersRoles
(
    RoleID int NOT NULL,
    UserID int NOT NULL,
    CONSTRAINT PK_ALUserRole PRIMARY KEY(RoleID, UserID),
    CONSTRAINT FK_ALUserRole_RoleID FOREIGN KEY(RoleID) REFERENCES AL.ALRole(ID),
    CONSTRAINT FK_ALUserRole_UserID FOREIGN KEY(UserID) REFERENCES AL.ALUser(ID)
)

现在我尝试使用如下代码映射多对多关系:

// ...I'm in the EntityTypeConfiguration-derived class (User)
HasMany(u => u.Roles)
    .WithMany(r => r.Users)
    .Map(m =>
    {
        m.MapLeftKey(u => u.ID, "UserID");
        m.MapRightKey(r => r.ID, "RoleID");
        ToTable("ALUsersRoles", "AL");
    });

我尝试了这段代码中所有可能的组合和变体,但我总是得到错误:

{"Invalid column name 'Name'.\r\nInvalid ...and so on...

所以我认为它一定是没有正确创建的表。 有任何想法吗? 提前致谢 安德烈亚 P.S.:我删除了一些代码,所以可能会有一些小错字......

【问题讨论】:

  • 你解决了这个问题吗?
  • 这是代码优先,而不是数据库优先。

标签: entity-framework entity-framework-4 entity-framework-ctp5


【解决方案1】:

好吧,这对我来说和 OP 一样。

        //many-to-many between *Users -> Web_User_Rol <- Web_Rol*
        modelBuilder.Entity<Users>()
            .HasMany(u => u.Web_Rols).WithMany(r => r.Users)
            .Map(t=>t.MapLeftKey("user_id")
                     .MapRightKey("roleID")
                     .ToTable("Web_User_Rol"));

【讨论】:

    【解决方案2】:

    您的对象模型或流畅的 API 代码没有任何问题。我已经使用过它们,它们完美地创建了所需的架构,没有任何例外。我认为您的问题来自与您在此处显示的内容无关的另一个实体(可能具有 "Name" 属性的实体)。要找到它,删除(或重命名)现有数据库并让 Code First 为您创建一个,然后比较这两个数据库,看看有什么不同。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-04-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多