引进国外KEY约束可能会导致循环或多重级联路径

我看了看周围的这一个,我想我已经做了我需要,以解决此问题的一切。 显然并非如此,虽然。

基本上我有一个国家,地区,目的地。 各地区必须属于一个国家。 每个地方必须属于一个国家。 一个目的地可能属于一个区域。

国家>区域>目的地或国家>目的地

当我的代码首先创建数据库,我得到了臭名昭著的:

对表'目的地'引进国外KEY约束'FK_Destinations_DestinationRegions_DestinationRegionID'可能会导致循环或多重级联路径。 指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。 请参阅以前的错误。

这是使用EF代码第一次全部搞定。

我有一个国家类:

public class DestinationCountry { public int ID { get; set; } public bool Active { get; set; } [Required(ErrorMessage=" ")] [DisplayName("Country")] public string Name { get; set; } }

和一个图:

public class DestinationCountryMap : EntityTypeConfiguration<DestinationCountry> { public DestinationCountryMap() { // Primary Key this.HasKey(t => t.ID); // Properties this.Property(t => t.Name) .IsRequired() .HasMaxLength(256); this.ToTable("DestinationCountry"); this.Property(t => t.ID).HasColumnName("ID"); } }

我有一个区域类:

public class DestinationRegion { public int ID { get; set; } [Required(ErrorMessage = " ")] [DisplayName("Country")] public int DestinationCountryID { get; set; } public string Name { get; set; } public virtual DestinationCountry DestinationCountry { get; set; } }

和一个图:

public class DestinationRegionMap : EntityTypeConfiguration<DestinationRegion> { public DestinationRegionMap() { // Primary Key this.HasKey(t => t.ID); // Properties this.Property(t => t.Name) .IsRequired() .HasMaxLength(256); this.ToTable("DestinationRegion"); this.Property(t => t.ID).HasColumnName("ID"); this.Property(t => t.DestinationCountryID).HasColumnName("DestinationCountryID"); // Relationships this.HasRequired(t => t.DestinationCountry) .WithRequiredPrincipal() .WillCascadeOnDelete(false); } }

我有一个目标类:

public class Destination { public int ID { get; set; } [Required(ErrorMessage = " ")] [DisplayName("Country")] public int DestinationCountryID { get; set; } public int DestinationRegionID { get; set; } public string Name { get; set; } public virtual DestinationCountry DestinationCountry { get; set; } public virtual DestinationRegion DestinationRegion { get; set; } }

和一个图:

public class DestinationMap : EntityTypeConfiguration<Destination> { public DestinationMap() { // Primary Key this.HasKey(t => t.ID); // Properties this.Property(t => t.Name) .IsRequired() .HasMaxLength(256); this.ToTable("Destination"); this.Property(t => t.ID).HasColumnName("ID"); this.Property(t => t.DestinationCountryID).HasColumnName("DestinationCountryID"); this.Property(t => t.DestinationRegionID).HasColumnName("DestinationRegionID"); this.Property(t => t.Name).HasColumnName("Name"); // Relationships this.HasRequired(t => t.DestinationCountry) .WithRequiredPrincipal() .WillCascadeOnDelete(false); this.HasOptional(t => t.DestinationRegion) .WithOptionalPrincipal() .WillCascadeOnDelete(false); } }

可能有人请告诉我如何我这样做是错误的。

--------------解决方案-------------

SQL Server有级联删除一个非常简单的模型。 它不能与你在这里指定什么应对:如果一个国家被删除,目的地可能会被删除,直接或通过中间区域(因此引用多个级联路径)。

如果可以的话,你应该考虑重新组织使得每个国家至少有一个地区(即使它是一个虚拟的区域),每个目的地只属于一个区域(并且没有直接链接到国家)。 然后,所有的删除可以按照单个路径(国家 - >地区 - >目的地)。

似乎我有什么不只有“WithRequiredPrincipal”到“WithRequiredDependent”的微小变化工作。 但最重要的,我需要包括在modelBuilder.Configuration我的映射类。

分类:asp.net的MVC 3 时间:2015-03-15 人气:0
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 1.841 (s). 10 q(s)