【发布时间】:2012-03-21 18:03:16
【问题描述】:
我正在使用实体框架并为多对多关系建模。
我已经使用 fluent API 创建了两个实体之间的关系(比如说用户和组):
this.HasMany(t => t.Users)
.WithMany(t => t.Groups)
.Map(
m =>
{
m.ToTable("GroupMembers");
m.MapLeftKey("Group_Id");
m.MapRightKey("User_Id");
});
这很好用,但我也希望能够直接引用 GroupMembers 表。为此,我有类似的东西:
[Table("GroupMembers")]
public class GroupMember
{
#region Properties
/// <summary>
/// Gets or sets the group.
/// </summary>
public virtual Group Group { get; set; }
/// <summary>
/// Gets or sets the Id of rht group.
/// </summary>
[Key]
[Column("Group_Id", Order = 1)]
public int GroupId { get; set; }
/// <summary>
/// Gets or sets the user.
/// </summary>
public virtual User User { get; set; }
/// <summary>
/// Gets or sets the Id of the user.
/// </summary>
[Key]
[Column("User_Id", Order = 2)]
public int UserId { get; set; }
#endregion
}
但是,在初始化 DbContext 的过程中会出现以下错误:
指定的架构无效。错误:(381,6):错误 0019: 具有模式 'dbo' 和表 'GroupMembers' 的 EntitySet 'GroupUser' 是 已经定义了。每个 EntitySet 必须引用一个唯一的模式,并且 表。
我相信这是因为实体框架没有意识到 fluent API 中指定的 GroupMembers 表和 GroupMembers 实体表实际上是一回事。换句话说,如果我删除描述多对多关系的 fluent API 代码,那么我就能够成功地初始化 DbContext。
我可以有一个我也可以直接引用的多对多表吗?
【问题讨论】:
标签: entity-framework-4.1 ef-code-first many-to-many