我正在使用self-reference
,这是我的实体模型:
self-reference
并且正如您所见,它具有Public class Document
{
Public int Id { get; set; }
Public Document Parent { get; set; }
Public Document SrcDocument { get; set; }
}
属性。
现在我正在尝试添加另一个SELECT distinct a.StudentID,
b.Coin
FROM table a
Join ( Select Student ID,
CASE WHEN Coin = 'Tails' then 'Tails'
Else 'heads'
END Coin
From table ) b on b.student_id = a.student_id
属性:
server.port=8443
server.ssl.key-store=classpath:certs/localhost.keystore
server.ssl.key-store-password=somepass
server.ssl.key-password=somepass
但不幸的是我遇到了以下错误:
无法确定类型“文档”和“文档”之间关联的主要结尾。必须使用关系流畅API或数据注释显式配置此关联的主要结尾。
答案 0 :(得分:2)
实体框架Code-First
约定假设Document
和Document
属于相同的关系,并且是彼此的反向导航属性。因为两个导航属性都是引用(而不是集合),EF
推断出one-to-one
关系。
由于您实际上需要两个one-to-many
关系,因此必须覆盖约定。只需覆盖上下文的OnModelCreating
方法,然后就这样的新周期关系提出你的想法:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Document>().HasRequired(p => p.SrcDocument).WithMany();
base.OnModelCreating(modelBuilder);
}
modelBuilder.Entity<Document>().HasRequired(p => p.SrcDocument).WithMany();
对实体框架说SrcDocument
与自身有one-to-many
的关系。
您也可以使用以下代码:
modelBuilder.Entity<Document>().HasOptional(p => p.SrcDocument).WithMany();
建立zero-to-many
关系。
并且用这个:
modelBuilder.Entity<Document>().HasOptional(p => p.SrcDocument).WithOptionalDependent();
您可以定义one-to-zero
关系。
我会工作。
答案 1 :(得分:1)
尝试使用InverseProperty
属性:
public class Document
{
public int Id { get; set; }
public virtual Document Parent { get; set; }
public int ParentId { get; set; }
public virtual Document SrcDocument { get; set; }
public int SrcDocumentId { get; set; }
[InverseProperty("Parent")]
public virtual ICollection<Document> Children {get;set;}
[InverseProperty("SrcDocument")]
public virtual ICollection<Document> Derived {get;set;}
}
<强>迁移:强>
CreateTable(
"dbo.Documents",
c => new
{
Id = c.Int(nullable: false, identity: true),
ParentId = c.Int(nullable: false),
SrcDocumentId = c.Int(nullable: false),
})
.PrimaryKey(t => t.Id)
.ForeignKey("dbo.Documents", t => t.ParentId)
.ForeignKey("dbo.Documents", t => t.SrcDocumentId)
.Index(t => t.ParentId)
.Index(t => t.SrcDocumentId);