2012-02-02 79 views
0

UPDATE: 我更新了類看起來更像我的實際模型。當我從文檔基礎實體中刪除可分配屬性時,一切正常。在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是一個外鍵的混凝土實體之一?我爲Document實體創建了一個映射,並且出現錯誤:「屬性'Id'不是類型中的聲明屬性...」我猜這是因爲EF不知道如何區分AssignedToId引用的內容?

+0

你根本不需要映射,它只是與約定一起工作。你創建的地圖是什麼? – Slauma 2012-02-02 15:21:53

+0

@Slauma:我更新了我的問題。我想我可能需要將可分配表與FKs分配給屬於Type Assignable的任何屬性。也許? – DDiVita 2012-02-02 16:07:22

+0

映射代碼甚至無法編譯,特別是對於'DocumentEntityMapping'。而'Document'有一個重複的'Id'。你使用TPH還是TPT繼承?我試圖重現你的例外,但我沒有能力。 – Slauma 2012-02-02 17:00:49

回答

0

我在ContactPartner實體周圍有很多額外的架構,我不能使用類似TPH (Table Per Hierarchy)的方法。 EF不知道如何映射Document類中的AssignedToId,因爲我試圖同時使用Table per Concrete Type (TPC)。我最終只是將所有「可分配」類型添加到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;} 
} 
相關問題