2017-04-14 5 views
0

私はモデルPostgreSQLのEntity Frameworkのは誤り

public class Role 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
    public string shortname { get; set; } 
} 
public class User 
{ 
    public int id { get; set; } 
    public string login { get; set; } 
    public int idrole { get; set; } 
    public DateTime regdate { get; set; } 
    public int idregistred { get; set; } 
    public virtual Role role { get; set; } 
} 

を持っていると私は、リポジトリと負荷データを作成するよ:私は、データをロードすると

public class Repository 
    { 
     public IQueryable<TEntity> Select<TEntity>() 
      where TEntity : class 
     { 
      var context = new QContext(); 
      return context.Set<TEntity>(); 
     } 

    } 

var rep = new Repository(); 
var roles = rep.Select<User>().Include(el => el.role).ToList(); 

、私が持っているエラー:

column Extent1.role_id does not exist

生成されたSQL:

SELECT "Extent1"."id", "Extent1"."login", "Extent1"."idrole", "Extent1"."regdate", "Extent1"."idregistred", "Extent2"."id" AS "id1", "Extent2"."name", "Extent2"."shortname" FROM "questionnaire"."user" AS "Extent1" LEFT OUTER JOIN "questionnaire"."role" AS "Extent2" ON "Extent1"."role_id" = "Extent2"."id"

しかし、データベースで私は "role_id"の列を持っていません。 "アンケート"で "user"私は "idrole"しか持っていない。

どのようにデータを読み込むことができますか?エンティティが不正なSQLコードを作成するのはなぜですか?どのようにそれを修正する?私は、エンティティフレームワークv6.1.3を使用し

、Npgsqlののv2.2.7とNpgsql.EntityFrameworkのv2.2.7

+0

クラス 'User'の' role'の定義に '[ForeignKey(" idrole ")]'属性を追加すると助けになりますか? –

+0

エラーが発生しましたプロパティ 'idrole'をナビゲーションプロパティとして設定することはできません。プロパティは有効なエンティティタイプでなければならず、プロパティには非抽象ゲッタとセッタが必要です。コレクションのプロパティでは、ICollection を実装する必要があります。ここで、Tは有効なエンティティタイプです。 – Alexander

+0

それは大丈夫です!ありがとう! – Alexander

答えて

0

Entity Frameworkのは、あなたがお互いにテーブルをリンクしているかを推測することはできません。デフォルトの方法は、role_idというフィールド名に_idを追加することです。実際の列が機能するためには、EFに指示する必要があります。あなたはForeignKeyAttributeを使用してこれを行うことができます。

[ForeignKey("idrole")] 
public Role role { get; set; } 

EFが列idroleを知っているこの方法では、roleテーブルを参照するために使用されます。