EF には、ブリッジ テーブルを表すオブジェクトはありません。しかし、ブリッジテーブルにレコードを削除/追加する必要があるため、ブリッジテーブルを表すクラスを作成したい
例えば:
User: userID, name
Group: groupID, name
tblUserGroup: userID, groupID (bridge table)
私は次のものを持っています:
public class EFDbContext : DbContext
{
public DbSet<User> User { get; set; }
public DbSet<Group> Group { get; set; }
public DbSet<GroupUser> tblGroupUser { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<User>().ToTable("User");
modelBuilder.Entity<Group>().ToTable("Group");
modelBuilder.Entity<GroupUser>().HasKey(a => new { a.UserID, a.GroupID });
modelBuilder.Entity<Group>()
.HasMany(u => u.User)
.WithMany(g => g.Group)
.Map(m =>
{
m.MapLeftKey("GroupID");
m.MapRightKey("NetworkUserID");
m.ToTable("tblGroupUser");
});
}
}
ブリッジテーブルを使いたいとき
context.tblGroupUser...(do sth)
エラーは言う
Invalid object name 'dbo.GroupUsers'.
GroupUserがどのテーブルにマップされているかわからないと言っていると思います
しかし、追加すると
modelBuilder.Entity<GroupUser>().ToTable("tblGroupUser");
エラーは次のように変わります
Each EntitySet must refer to a unique schema and table.
現在、tblGroupUser を 2 回マップすることはできません。この問題を解決するにはどうすればよいですか
他の情報
public class EFGroupkUser
{
private EFDbContext context = new EFDbContext();
public IQueryable<GroupUser> tblGroupUser
{
get { return context.tblGroupUser; }
}
}