私はリンクテーブルでEntityFrameworkを使用しており、 "RolePrivileges"というリンクテーブルを作成するOnModelCreatingを作成しました。しかし、私は、同じデータベースを使用する別のdbcontextを持っていますが、関連して、他の方法は、私はこのエラーを取得する:
Invalid object name 'dbo.PrivilegeRoles'
どのリンクテーブルを使用するかをEFに教えるには?
マイ特権クラスはpublic virtual ICollection<Role> Roles { get; set; }
性質を持っています。
EFがRolePrivilegesでありPrivilegeRolesではないことをどのように伝えることができますか?
UPDATE
私はいくつかのコード、この大きなプロジェクトを追加していると私は、リポジトリパターンとすべてのことを使用しています。これは単にエラーを表示するだけです
私は多くのプロジェクトを持っていますが、すべてのエンティティ、マイグレーション、およびすべてを持つデータベースを生成するためのものです。
:私はちょうどこのpublic class RoleDbContext : DbContext
{
public RoleDbContext()
: base("DefaultConnection")
{
}
public DbSet<Role> AccessRoles { get; set; }
public DbSet<Privilege> Privileges { get; set; }
}
public class Privilege
{
public string Id { get; set; }
...
[JsonIgnore]
[IgnoreDataMember]
public virtual ICollection<Role> AccessRoles { get; set; }
}
public class Role
{
public string Id { get; protected set; }
public string Name { get; protected set; }
public List<Privilege> Privileges { get; set; } = new List<Privilege>();
}
が含まれており、ここで私はエラーを取得する例を示しますdbcontextを持っている別のプロジェクトで
public class EasyhoursDbContext : IdentityDbContext<ApplicationUser>
{
...
public DbSet<Role> AccessRoles { get; set; }
public DbSet<Privilege> Privileges { get; set; }
...
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
...
modelBuilder.Entity<Role>()
.HasMany(role => role.Privileges)
.WithMany(p => p.AccessRoles)
.Map(ap =>
{
ap.MapLeftKey("RoleId");
ap.MapRightKey("PrivilegeId");
ap.ToTable("RolePrivileges");
});
...
}
}
public class Role
{
[Key]
public string Id { get; protected set; }
public string Name { get; protected set; }
public virtual List<Privilege> Privileges { get; private set; }
}
public class Privilege
{
[Key]
public string Id { get; set; }
...
public virtual ICollection<Role> AccessRoles { get; set; }
}
そしてを持って、このプロジェクトではdbcontextで
var db = new RoleDbContext();
var role = db.AccessRoles.FirstOrDefault(r => true);
var privilege = db.Privileges.FirstOrDefault(p => true);
role.Privileges.Add(privilege);
db.Entry(role).State = EntityState.Modified;
db.SaveChanges();
変更を保存するとエラーが表示されます。
これと同じコードを実行が、EasyhoursDbContextに代わり、それは私がEasyhoursDbContextとしてonmodelcreationの正確な同じルールを含むようになりましたRoleDbContextを更新
UPDATE
正常に動作します。
しかし、今、私はこのエラーを取得しています: Violation of PRIMARY KEY constraint 'PK_dbo.RolePrivileges'. Cannot insert duplicate key in object 'dbo.RolePrivileges'. The duplicate key value is (03fd67b6-277f-43f6-b276-5bafbdbe55af, A657a693-0961-Role-b86b-381261aApply).\r\nThe statement has been terminated.
マルチコンテキストの問題にOnModelCreation追加問題の文脈のためにあなたのモデルと流暢なコードを示すことでした。 –
質問を更新しました – Jeggy
'EasyhoursDbContext'のように' RoleDbContext'' OnModelCreating'に流暢な設定を追加してみませんか? –