1

これは隠された規則に関するものですが、多対多の関係を既存のデータベースにマップしようとすると、常にエラーが発生します。私はデシベルで通常の3つのテーブルを持ってEF4 CTP5データベースファースト+多対多関係(エラー)

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

私は、このコードのすべてのpossibileの組み合わせとバリエーションを試してみましたが、私は常にエラーを取得:

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

だから、正しく作成されていないテーブルである必要があります。 アイデア事前 アンドレア P.S:私は私のコードの一部をストリップダウン、ので、多分いくつかの小さなタイプミスがある可能で おかげで...

+0

解決しましたか? –

+3

これはコードではなく、データベースではありません。 – gunwin

答えて

0

あなたのオブジェクトモデルや流暢なAPIコードは何も問題はありません。私はそれらを使用して、彼らは完全に例外なく、望ましいスキーマを作成しました。あなたの問題は、あなたがここに示したものとは無関係の別のエンティティ(たぶん"名前"プロパティを持つもの)から来ていると思います。それを見つけるには、既存のデータベースを削除(または名前を変更)して、Code Firstに作成させてから、2つのデータベースを比較し、異なるものを確認します。

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"));