2010-12-13 10 views
0

私はまずコードのCTP5を使用しています。以下の単純なクラスと関連するDbContextを取るエンティティフレームワーク - コードデータベースで関連するコレクションを初めて生成しない

public class Test 
{ 
    public Test() 
    { 
     Keywords = new Collection<string>(); 
    } 

    public int Id { get; set; } 
    public string Name { get; set; } 
    public ICollection<string> Keywords { get; set; } 
} 

public class TestDbContext : DbContext 
{ 
    public TestDbContext() 
    { 
     Database.Delete(); 
     Database.CreateIfNotExists(); 
    } 

    public DbSet<Test> Tests { get; set; } 

    protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder) 
    {  
     base.OnModelCreating(modelBuilder); 
    } 
} 

型 'System.Collections.Generic.ICollectionは「T」 ジェネリック型またはパラメータとしてそれを使用するために、null非許容値型でなければなりません方法「System.Data.Entity.ModelConfiguration.Configuration.Types.StructuralTypeConfiguration .Property(System.Linq.Expressions.Expression>」)

任意のアイデアをどのようにテストクラスとキーワードのプロパティとの間に必要なテーブルのリレーションシップを作成するには?このように作成

答えて

3

追加クラスKeywordと変更ICollection<string> Keywords {get; set;}ICollection<Keyword> Keywords {get; set;}

public class Keyword 
{ 
    public string Data {get;set;} 
} 

とコードモデル:

protected override void OnModelCreating(ModelBuilder builder) 
{ 
    builder.Entity<Keyword>() 
     .HasKey(x => x.Data); 
    base.OnModelCreating(builder); 
} 

はちょうどあなたが2つのコレクション1持っていることを、想像 - キーワード、2 - タグを。 ORMマッピング・タイプではエンティティを定義しているため、実現は同じ表にマップされます。 KeywordTagはいずれもstring型です。したがって、このエンティティを分割するには型を分割する必要があります。

+0

ありがとうございますが、なぜこのためのクラスを作成する必要がありますか? ICollection からの関係を推論する方法はありませんか? – Fixer

+0

POCOオブジェクトを基底型ではなくDBにマップするため、格納しているすべてのデータのクラスを追加する必要があります。 –

+0

ありがとう、私はキーワードテーブルからTest.Idを落として、Test.IdのFKに基づいてテストクラスの関係を作ることができますか? – Fixer

関連する問題