2012-04-01 6 views
0

私は、次のエンティティいます倍数コードファーストでのオブジェクトの関係

  • お客様
  • 会社
  • 従業員
  • 受注
  • オーダー要素

は、その後、私は別のものを持っていますNotesと呼ばれるエンティティ。各エンティティは多くのNotesを持つことができます。どのようにコードを最初に流暢なAPIでこれを達成しますか?目標はNotesテーブルにオブジェクトIdを持ち、このエンティティIDが適切なエンティティを指すことです。

答えて

0

Entity Frameworkの箱から出して、異種団体をサポートしていません(NHibernateのような他のフレームワークは、やる)

マイWOR解決策は、永続エンティティのメモを格納して取得するNoteServiceを使用することです。ここで

は、簡略化の抜粋です:

public ICollection<Note> GetNotes(IEntity entity) 
{ 
    var entityType = ObjectContext.GetObjectType(entity.GetType()).Name; 
    return context.Query<Note>() 
        .Where(x => x.EntityId == entity.Id && 
           x.EntityType == entityType) 
        .ToList(); 
} 

public void AddNote(IEntity entity, Note note) 
{ 
    note.EntityType = ObjectContext.GetObjectType(entity.GetType()).Name; 
    note.EntityId = entity.Id; 
    context.Add(note); 
} 
1

あなたは、Notesプロパティ(ES WithComment) をマップに新しいベースクラスを持つすべてのエンティティを拡張することができますし、新しいプロパティにマッピングするクラスを記述するよりも:

public class WithComment 
{ 
    public virtual IList<Note> Notes { get; set; } 
} 

public class Customer : WithComment 
{ 
} 

public class CustomerMapping : EntityTypeConfiguration<Customer> 
{ 
     public CustomerMapping() 
     { 
      ToTable("Customers"); 
      .......................... 

      HasMany<Notes>(o => o.Notes); // relation to note class 
     } 
} 

をしてから

構成を追加します
public class MyContext : DbContext 
{ 
     public MyContext() { } 

     protected override void OnModelCreating(DbModelBuilder modelBuilder) 
     { 
      modelBuilder.Configurations.Add(new CustomerMapping()); 

      base.OnModelCreating(modelBuilder); 
     } 
} 
関連する問題