Сначала база данных EF4 CTP5 + отношение «многие ко многим» (ошибка) - PullRequest
1 голос
/ 20 января 2011

Я почти уверен, что это что-то в отношении скрытых соглашений, но я всегда получаю сообщение об ошибке при попытке сопоставить отношение «многие ко многим» с существующей базой данных. Вот самый простой пример:

[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; }
}

Я получил обычные три таблицы в БД: первые две очевидны, а третья создается с помощью этого сценария:

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...

Так что я думаю, что это должна быть таблица, созданная неправильно. Есть идеи? заранее спасибо Andrea П.С .: Я сократил часть своего кода, так что, возможно, возможна небольшая опечатка ...

Ответы [ 2 ]

1 голос
/ 26 октября 2011

ну, это работает для меня так же, как 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"));
0 голосов
/ 20 января 2011

В вашей объектной модели или свободном API-коде нет ничего плохого.Я использовал их, и они отлично создали желаемую схему без каких-либо исключений.Я думаю, что ваша проблема связана с другим объектом (возможно, со свойством "Name" ), не связанным с тем, что вы здесь показали.Чтобы найти это, удалите (или переименуйте) свою существующую базу данных и позвольте Code First создать ее для вас, а затем сравните две базы данных и посмотрите, что отличается.

...