C# 如何在实体framefork 6中映射同一类的两个列表属性

C# 如何在实体framefork 6中映射同一类的两个列表属性,c#,entity-framework,orm,C#,Entity Framework,Orm,我的班级是 public class DocumentSale { public List<DocumentSale> FollowDocuments {get; set;} public List<DocumentSale> BaseDocuments {get; set;} } 公共类文档销售 { 公共列表跟随文档{get;set;} 公共列表基本文档{get;set;} } 如何在实体框架上映射它?我犯了一个错误 关系“DocumentSaleDo

我的班级是

public class DocumentSale 
{
   public List<DocumentSale> FollowDocuments {get; set;}
   public List<DocumentSale> BaseDocuments {get; set;}
}
公共类文档销售
{
公共列表跟随文档{get;set;}
公共列表基本文档{get;set;}
}
如何在实体框架上映射它?我犯了一个错误

关系“DocumentSaleDocumentSales”的“FK_dbo.DocumentSaleDocumentSales_public.saledocument_DocumentSa”已存在


我的数据库是postgres 9.4.9,你可以试试这样的

public class DocumentSale
{
    [Key]
    public int Id { get; set; }
    public int? FollowDocumentId { get; set; }
    public int? BaseDocumentId { get; set; }

    public virtual DocumentSale FollowDocument { get; set; }
    public virtual DocumentSale BaseDocument { get; set; }

    [ForeignKey(nameof(FollowDocumentId))]
    public virtual List<DocumentSale> FollowDocuments { get; set; }
    [ForeignKey(nameof(BaseDocumentId))]
    public virtual List<DocumentSale> BaseDocuments { get; set; }
}
公共类文档销售
{
[关键]
公共int Id{get;set;}
public int?FollowDocumentId{get;set;}
public int?BaseDocumentId{get;set;}
公共虚拟文档Sale FollowDocument{get;set;}
公共虚拟文档Sale BaseDocument{get;set;}
[ForeignKey(name of(FollowDocumentId))]
公共虚拟列表跟随文档{get;set;}
[ForeignKey(nameof(BaseDocumentId))]
公共虚拟列表基本文档{get;set;}
}

这就是我所需要的:

public class DocumentSale 
{
   public List<DocumentSale> FollowDocuments {get; set;}
   public List<DocumentSale> BaseDocuments {get; set;}
}

  modelBuilder.Entity<DocumentSale>()
        .HasMany<DocumentSale>(c => c.baseDocuments)
        .WithMany(c => c.followUpDocuments)
        .Map(
        cs =>
            {
                cs.MapLeftKey("followdocid");
                cs.MapRightKey("basedocid");
                cs.ToTable("basefollow");
            }
        );
公共类文档销售
{
公共列表跟随文档{get;set;}
公共列表基本文档{get;set;}
}
modelBuilder.Entity()
.HasMany(c=>c.baseDocuments)
.有许多(c=>c.后续文档)
.地图(
cs=>
{
cs.MapLeftKey(“followdocid”);
cs.MapRightKey(“basedocid”);
cs.ToTable(“basefollow”);
}
);

类DocumentSale还有一个id字段,标记为[Key]您必须使用InversePropertyMessage=在模型生成过程中检测到一个或多个验证错误:DocumentSale\u baseDocuments\u Source\u DocumentSale\u baseDocuments\u Target::引用约束的从属角色中所有属性的类型必须与主体角色中相应的属性类型相同。实体“DocumentSale”上的属性“BaseDocumentId”的类型与引用约束“DocumentSale\u baseDocuments”中实体“DocumentSale”上的属性“id”的类型不匹配。DocumentSale\u followUpDocuments\u Source\u DocumentSale\u followUpDocuments\u Target::引用约束的从属角色中的所有属性的类型必须为与主体角色中相应的属性类型相同。实体“DocumentSale”上的属性“FollowDocumentId”的类型与引用约束“DocumentSale\u followUpDocuments”中实体“DocumentSale”上的属性“id”的类型不匹配。该错误表示id属性的类型与BaseDocumentId不同。可能您的Id属性的类型为
long
Guid
?我还在我的项目中测试了我的代码,一切正常。