0

MVC5アプリケーションでエンティティフレームワークバージョン6を使用しています。 Iデータモデル(.edmx)は2つのエンティティユーザーユーザー役割データベースで私のテーブルに対応する役割が含まれています。エンティティフレームワーク6が外部キー列をアンダースコアで追加しています

ユーザーテーブルには列が含まれています。id int型、名前:Idをint型、名前NVARCHAR(100)、RoleId intが(RoleIdがRoles.Idと外部キー制約を持っている)

役割テーブルには列が含まれていますnVarchar(100)

My Entityモデルは、テーブル構造ごとに正しいエンティティを生成しています。

ユーザーエンティティ(_db.Users.ToList())をDBコンテキストから照会すると、エンティティ・フレームワークはRoleId列の代わりにユーザー表のRole_Id列を探しているため、エラーが発生します。

エンティティのフレームワーククエリジェネレータがエンティティのクエリ中にRole_Idカラムを探しているのはなぜですか?

答えて

0

通常、ユーザーとロールには多対多の関係があるため、ユーザーとロールの両方で対応する関係が定義されている必要があります。

public class Users 
{ 
    public int Id { get; set; } 
    public string UserName { get; set; } 

    public virtual ICollection<Role> Roles{ get; set; } 
} 

public class Role 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 

    public virtual ICollection<User> Users{ get; set; } 
} 

あなたが関係をより多くの属性を追加したい場合は、明示的エンティティとして関連付けを定義することができます。

public class UserRoles// Association table implemented as entity 
{ 
    public int UserId{ get; set; } 
    public virtual User User{ get; set; } 
    public int RoleId{ get; set; } 
    public virtual Role Role{ get; set; } 
    public DateTime AssignmentDate{ get; set; } 
} 

また、最後に明示的にhttp://www.entityframeworktutorial.net/code-first/configure-many-to-many-relationship-in-code-first.aspx

関係を定義することができます、あなたもDataAnnotionsを使用することができますCreate Foreign Key using Data Annotations

+0

ありがとう、しかし私の質問は、なぜエンティティフレームワーククエリジェネレータがRole_Id列wh ileクエリエンティティ? –

+0

これは、RoleIdが外部キーであることをEFが理解していないため、新しい外部キーフィールドを追加するために起こります。自動的に挿入された外部キーフィールドの名前を付けるためのEF規則はtablename_Idです。これはあなたが見ているものです。クラス定義コードを投稿すると、何が間違っているかを教えてくれます。 – spadelives

関連する問題