【发布时间】: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