EF 6 实体中的循环和外部引用
Circular and external references in EF 6 entities
我有两个模型:
class Site {
public virtual string Name { get; set; }
public virtual Page RootPage { get; set; }
}
class Page {
public virtual string Name { get; set; }
public virtual string Content { get; set; }
public virtual Site ContainingSite { get; set; }
public virtual Page ParentPage { get; set; }
public virtual ICollection<Page> NestedPages { get; set; }
}
页面可以嵌套,但它们都必须绑定到一个站点。但是,任何站点只能有一个根页面。
配置如下:
modelBuilder.Entity<Site>().HasRequired(x => x.RootPage).WithRequiredPrincipal(x => x.ContainingSite);
modelBuilder.Entity<Page>().HasMany(x => x.NestedPages).WithOptional(x => x.ParentPage);
我在插入数据时一直收到此错误:
Multiplicity constraint violated. The role 'Site_RootPage_Target' of the relationship 'MySite.DataModel.Site_RootPage' has multiplicity 1 or 0..1.
如何配置 EF 以使其理解我的结构?
我会从 Page 中删除 "Site ContainingSite" 行,
并仅使用页面的 ParentPage 导航到包含站点。
例如this.RootPage.ContainSite
Multiplicity constraint violated.
您收到此错误是因为您可能试图创建具有相同 ContainingSite
的多个 Page
实体,但
modelBuilder.Entity<Site>()
.HasRequired(x => x.RootPage)
.WithRequiredPrincipal(x => x.ContainingSite);
creates a one-to-one 关系,其中 someSite.RootPage.ContainingSite == someSite
和 somePage.ContainingSite.RootPage == somePage
.
拥有三种不同的关系可能更有意义:
- 每个
Site
都有一个根Page
- 每个
Page
都是包含 Site
的一部分(或者每个 Site
有很多 Page
)
- 每个
Page
有许多嵌套的 Page
s
...尽管如果您想确保 Page
及其 .ParentPage
和 .NestedPages
都具有相同的 ContainingSite
,则保持一致性可能很困难,并且a Site
和它的 .RootPage.ContainingSite
相等,等等
顺便说一句,如果您想在数据库中创建某种树结构,也许 this (starting from page 49) 会有所帮助?
我有两个模型:
class Site {
public virtual string Name { get; set; }
public virtual Page RootPage { get; set; }
}
class Page {
public virtual string Name { get; set; }
public virtual string Content { get; set; }
public virtual Site ContainingSite { get; set; }
public virtual Page ParentPage { get; set; }
public virtual ICollection<Page> NestedPages { get; set; }
}
页面可以嵌套,但它们都必须绑定到一个站点。但是,任何站点只能有一个根页面。
配置如下:
modelBuilder.Entity<Site>().HasRequired(x => x.RootPage).WithRequiredPrincipal(x => x.ContainingSite);
modelBuilder.Entity<Page>().HasMany(x => x.NestedPages).WithOptional(x => x.ParentPage);
我在插入数据时一直收到此错误:
Multiplicity constraint violated. The role 'Site_RootPage_Target' of the relationship 'MySite.DataModel.Site_RootPage' has multiplicity 1 or 0..1.
如何配置 EF 以使其理解我的结构?
我会从 Page 中删除 "Site ContainingSite" 行, 并仅使用页面的 ParentPage 导航到包含站点。 例如this.RootPage.ContainSite
Multiplicity constraint violated.
您收到此错误是因为您可能试图创建具有相同 ContainingSite
的多个 Page
实体,但
modelBuilder.Entity<Site>() .HasRequired(x => x.RootPage) .WithRequiredPrincipal(x => x.ContainingSite);
creates a one-to-one 关系,其中 someSite.RootPage.ContainingSite == someSite
和 somePage.ContainingSite.RootPage == somePage
.
拥有三种不同的关系可能更有意义:
- 每个
Site
都有一个根Page
- 每个
Page
都是包含Site
的一部分(或者每个Site
有很多Page
) - 每个
Page
有许多嵌套的Page
s
...尽管如果您想确保 Page
及其 .ParentPage
和 .NestedPages
都具有相同的 ContainingSite
,则保持一致性可能很困难,并且a Site
和它的 .RootPage.ContainingSite
相等,等等
顺便说一句,如果您想在数据库中创建某种树结构,也许 this (starting from page 49) 会有所帮助?