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引用的内容?
你根本不需要映射,它只是与约定一起工作。你创建的地图是什么? – Slauma 2012-02-02 15:21:53
@Slauma:我更新了我的问题。我想我可能需要将可分配表与FKs分配给属于Type Assignable的任何属性。也许? – DDiVita 2012-02-02 16:07:22
映射代码甚至无法编译,特别是对于'DocumentEntityMapping'。而'Document'有一个重复的'Id'。你使用TPH还是TPT继承?我试图重现你的例外,但我没有能力。 – Slauma 2012-02-02 17:00:49