Entity framework 实体框架4.1中带有外键的抽象属性?

Entity framework 实体框架4.1中带有外键的抽象属性?,entity-framework,entity-framework-4,Entity Framework,Entity Framework 4,更新: 我更新了这些类,使它们看起来更像我的实际模型。当我从文档库实体中删除可分配属性时,一切都正常 在EF4.1中可以映射类似的内容吗 public abstract class Entity { public Guid Id {get;set;} } public abstract class Assignable:Entity { } public class Contact: Assignable { public s

更新: 我更新了这些类,使它们看起来更像我的实际模型。当我从文档库实体中删除可分配属性时,一切都正常

在EF4.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>
{
....
}
公共类EntityConfiguration:EntityTypeConfiguration
其中tenty:实体
{
受保护的实体配置()
{
HasKey(e=>e.Id);
属性(e=>e.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
}
}
公共类AssignableEntityMapping:EntityConfiguration,其中tenty:Assignable
{
}
公共类DocumentEntityMapping:EntityConfiguration
{
公共文档映射()
{
HasOptional(e=>e.AssignedTo)。WithMany().HasForeignKey(e=>e.AssignedToId);
} 
}
公共类ContactMapping:AssignableEntityMapping
{
....
}
公共类PartnerMapping:AssignableEntityMapping
{
....
}
公共类映射:DocumentEntityMapping
{
....
}

如果这是可能的,我如何设置映射,以便AssignedToId是一个具体实体的外键?我为文档实体创建了一个映射,得到了一个错误:“属性'Id'不是类型上声明的属性…”我猜这是因为EF不知道如何区分AssignedTod指的是什么?

我在
联系人
合作伙伴
实体周围有很多额外的架构,我无法使用类似方法的东西。EF不知道如何映射
文档
类中的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;}
}

您根本不需要映射,它只适用于约定。您创建的映射是什么?@Slauma:我更新了我的问题..我想我可能需要一个带有FKs的可分配表,用于任何类型为可分配的属性。也许吧?映射代码甚至没有编译,特别是对于
DocumentEntityMapping
。而且
文档
有一个重复的
Id
。您使用的是TPH还是TPT继承?我试图复制您的异常,但无法执行。@Slauma:它可能无法为您编译,因为我忘记了更新文档实体和EntityConfiguration(示例中有一些额外的道具,这些道具不是示例的一部分)。我相信它一定是:
DocumentEntityMapping:EntityConfiguration
。类
实体
是否是您模型的一部分,即您在其他类中是否有
数据库集
实体
类型的一些导航属性?这将是一个问题,并解释了例外情况。