Entity framework 实体框架4.1中带有外键的抽象属性?
更新: 我更新了这些类,使它们看起来更像我的实际模型。当我从文档库实体中删除可分配属性时,一切都正常 在EF4.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
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
。类实体
是否是您模型的一部分,即您在其他类中是否有数据库集
或实体
类型的一些导航属性?这将是一个问题,并解释了例外情况。