2012-02-02 20 views
0

更新: 私のクラスは実際のモデルのように更新されました。ドキュメントベースエンティティからAssignableプロパティを削除すると、すべてが機能します。要約Entity Framework 4.1で外部キーを持つプロパティ

これはEF 4.1でマップできるのですか?

public abstract class Entity 
{ 
    public Guid Id {get;set;} 
}  

public abstract class Assignable:Entity 
    { 

    } 

    public class Contact: Assignable 
    { 
     public string Name {get;set;} 
    } 

    public class Partner: Assignable 
    { 
     public string Area {get;set;} 
    } 

    public abstract class Document: Entity  { 

     public Guid AssignedToId {get;set} 
     public Assignable AssignedTo {get;set; 
    } 

    public class Submittal: Document 
    { 
     public string SomeProperty {get;set;} 
    } 

マッピング:これが可能である場合

public class EntityConfiguration<TEntity> : EntityTypeConfiguration<TEntity> 
     where TEntity : Entity 
     { 
      protected EntityConfiguration() 
      { 
       HasKey(e => e.Id); 
       Property(e => e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity); 

      } 
     } 

    public class AssignableEntityMapping<TEntity>: EntityConfiguration<TEntity> where TEntity: Assignable 
{ 

} 
    public class DocumentEntityMapping<TEntity>: EntityConfiguration<TEntity> 
     { 
      public DocumentEntityMapping() 
      { 

       HasOptional(e => e.AssignedTo).WithMany().HasForeignKey(e => e.AssignedToId); 
      } 
     } 

public class ContactMapping: AssignableEntityMapping<Contact> 
{ 
.... 
} 

public class PartnerMapping: AssignableEntityMapping<Partner> 
{ 
.... 
} 

public class SubmittalMapping: DocumentEntityMapping<Submittal> 
{ 
.... 
} 

AssignedToIdは、具体的なエンティティの1への外部キーがあるように、どのように私のセットアップのマッピングを行いますか? Documentエンティティのマッピングを作成しました。エラーが発生しました。「プロパティ 'Id'は型の宣言されたプロパティではありません...」と推測しています.EdはAssignedToIdが何を参照するかを区別する方法を知らないためです?

+0

マッピングはまったく必要ではありません。慣習でのみ動作します。あなたが作成したマッピングは何ですか? – Slauma

+0

@Slauma:私は自分の質問を更新しました。私はFTを割り当て可能な任意のプロパティに割り当てることができるかもしれないと思います。多分? – DDiVita

+0

マッピングコードは、特に 'DocumentEntityMapping'ではコンパイルされません。 'Document'には重複した' Id'があります。 TPHまたはTPT継承を使用していますか?あなたの例外を再現しようとしていましたが、私はできませんでした。 – Slauma

答えて

0

ContactPartnerエンティティの周りには、私がTPH (Table Per Hierarchy)のようなものを使用できなかったエンティティがたくさんありました。 EFはTable per Concrete Type (TPC)を同時に使用しようとしていたので、DocumentクラスのAssignedToIdをどのようにマップするのか分かりません。私はすべての "割り当て可能な"型をDocumentクラスに今追加してしまいました。この周りに別の方法がある場合、私は知りたいです。

public abstract class Document: Entity 
{ 
    public Guid? AssignedContactId {get;set;} 
    public Contact AssignedContact {get;set;} 
    public Guid? AssignedPartnerId {get;set;} 
    public Partner AssignedPartner {get;set;} 
} 
関連する問題