2016-07-06 4 views
1

私は、コードを最初に既存のデータベースに使用するソリューションで汎用リポジトリを実装しようとしています。 Context.Setを実行しようとすると、「エンティティタイプが現在のコンテキストのモデルの一部ではない」というエラーが表示されます。私は何が欠けていますか?コードを既存のデータベースContext.Set <T>が動作しない

public partial class CPContext : DbContext 
{ 
    public CPContext() 
     : base("name=CPContext") 
    { 

    } 
    protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 

    } 
} 

モデル:

[Table("Core.Tenant")] 
public partial class Tenant : IEntity 
{ 
} 

使用法:これはエラーをスロー

var context = new CPContext(); 
var dbSet = context.Set<Tenant>(); 
var results = dbSet.ToList(); 

- エンティティタイプは、私ができた

現在のコンテキストのためのモデルの一部ではありませんContextのOnModelCreatingイベントを変更することでそれを取得する -

protected override void OnModelCreating(DbModelBuilder modelBuilder) 
    { 
     modelBuilder.Entity<Tenant>().ToTable("Core.Tenant"); 
    } 

しかし、なぜデータアノテーションをテーブル名に使用するときに上記の操作を行う必要があるのか​​わかりません。ここで完全に失われました

+2

"Core"が名前空間である場合、この注釈['Table(" Tenant "、Schema =" Core ")]を使用するとよいでしょう。 – Kinetic

+0

問題は部分的なキーワードに由来し、データアノテーションからではありません。 @KiNeTiCの回答に記載されているように、exacatlyでDbSetを使用してください! –

+0

@BassamAlugili DbSetを宣言せずにFluent Mappingで動作しますが、部分的に言及しましたが、Contextはこのシナリオに部分的にどのように影響しますか? – ocChipMunk

答えて

1

あなたのコンテキストにDbSetがありません。

public partial class CPContext : DbContext 
{ 
    public DbSet<Tenant> Tenants { get; set;} 

    public CPContext() 
     : base("name=CPContext") 
    { 

    } 

だからこそ、注釈マッピングが機能しないのです。 EFはそのクラスをマップしなければならないことを知る方法がありません。

+0

DbSetsを宣言する代わりにcontext.Set を使用することができます。次のように、http://stackoverflow.com/questions/13710883/using-dbcontext-sett-instead-of-exposing-on-the-context – ocChipMunk

+0

流暢なマッピングを使用している場合は、 DbSet、間違いなくそれについて。 – Kinetic

+0

注釈を使用したテーブルマッピングは機能しませんが、流暢なマッピングで動作します。 – ocChipMunk

関連する問題