次の状況を考えると、Entity Framework Code-first は、接続テーブルまたは結合テーブルの名前を間違えたり、名前を変更したりします。
public class User () {
//all fields from Users table
//...
//Role collection from Roles table through UserRoleLinks table
public List<Role> Roles { get; set; }
}
public class AppUser() {
//subset of fields from Users through AppUsers View
//...
//Role collection from Roles table through UserRoleLinks table
public List<Role> Roles { get; set; }
}
User と AppUser の両方に、次の構成エントリがあります。
this.HasMany(e => e.Roles)
.WithMany().Map(m => {
m.MapLeftKey(a => a.Id, "Users_Id");
m.MapRightKey(b => b.Id, "Roles_Id");
m.ToTable("UserRoleLinks");
});
実行時に AppUsers (DbSet<AppUser>) を使用しようとすると、次のエラーが発生します。
「オブジェクト名 'dbo.UserRoleLinks1' が無効です。」「オブジェクト名 'dbo.UserRoleLinks1' が無効です。」
結合テーブル名が既に存在するため、コード ファースト構成によって結合テーブル名がインクリメントされているようです。
どうすればこれを機能させることができますか? テーブルの列のサブセットを取得するより良い方法はありますか?