これは隠された規則に関するものだと確信していますが、多対多の関係を既存のデータベースにマップしようとすると、常にエラーが発生します。最も簡単な例を次に示します。
[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に通常の3つのテーブルがあります。最初の2つは明らかで、3つ目は次のスクリプトで作成されます。
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...
ですから、正しく作成されていないのはテーブルに違いないと思います。何か案は?事前に感謝しますAndreaPS:コードの一部を削除したので、小さなタイプミスがあるかもしれません...