Абстрактные свойства с внешним ключом в Entity Framework 4.1? - PullRequest
0 голосов
/ 02 февраля 2012

UPDATE : Я обновил классы, чтобы они больше походили на мою актуальную модель. Когда я удаляю свойство Assignable из базового объекта Document, все работает.

Возможно ли что-то подобное отобразить в 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 не объявлено для типа ...»

1 Ответ

0 голосов
/ 07 февраля 2012

У меня было много дополнительных архитектур вокруг сущностей Contact и Partner, которые я не мог использовать, например, TPH (Table Per Hierarchy) . EF не знает, как отобразить AssignedToId в классе Document, так как я пытался использовать Таблица для конкретного типа (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;}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...