我变得如此困惑! 这是我第一次使用MVC3和EF Code First。我收到以下错误:
在表'CityUsers'上引入FOREIGN KEY约束'FK_dbo.CityUsers_dbo.Cities_CityID'可能会导致循环或多个级联路径。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY约束。 无法创建约束。
我一直在努力工作几个小时,尽我所能,但却无法处理它!
情景是,有一个 Man 类,派生用户。 每个用户只属于一个城市。用户我的意思是管理员用户。每个城市都可以插入/更新多个城市,每个城市一次只能由一个用户修改。 我创建了第三个名为'CityUser'的表来跟踪修改城市记录的用户。
这是我的模型类:
public class Man
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public long ID { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(20)]
[LocalizedAttribute("FName")]
public string FName { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(20)]
[LocalizedAttribute("LastName")]
public string LastName { get; set; }
//------------------------------------------------------------//
[Required]
[RegularExpression("^[0-9]+$", ErrorMessageResourceName = "ErrorOnlyNumbers", ErrorMessageResourceType = typeof(MAHAL_E_MA_Model.Properties.Resources))]
[LocalizedAttribute("Mobile")]
public string Mobile { get; set; }
//------------------------------------------------------------//
[LocalizedAttribute("Phone")]
[RegularExpression("^[0-9]+$", ErrorMessageResourceName = "ErrorOnlyNumbers", ErrorMessageResourceType = typeof(MAHAL_E_MA_Model.Properties.Resources))]
public string HomePhone { get; set; }
//------------------------------------------------------------//
[RegularExpression("^[0-9]+$")]
[LocalizedAttribute("IDCardNumber")]
public string IDCardNumber { get; set; }
//------------------------------------------------------------//
[RegularExpression("^[0-9]+$")]
[LocalizedAttribute("NationalCode")]
public string NationalCode { get; set; }
//------------------------------------------------------------//
[MaxLength(10)]
[LocalizedAttribute("DOB")]
public int DOB { get; set; }
//------------------------------------------------------------//
[Required]
public int CityID { get; set; }
[ForeignKey("CityID")]
public virtual City CityParent { get; set; }
//------------------------------------------------------------//
[MaxLength(100)]
[LocalizedAttribute("Address")]
public string Address { get; set; }
//------------------------------------------------------------//
[LocalizedAttribute("PostalCode")]
public string PostalCode { get; set; }
//------------------------------------------------------------//
[MaxLength(255)]
[LocalizedAttribute("PhotoPath")]
public string PhotoPath { get; set; }
}
public class User : Man
{
[MaxLength(20)]
[LocalizedAttribute("Username")]
public string UserName { get; set; }
//------------------------------------------------------------//
[DataType(DataType.Password)]
[MaxLength(100), MinLength(6, ErrorMessageResourceType = typeof(MAHAL_E_MA_Model.Properties.Resources), ErrorMessageResourceName = "ErrorPasswordLength")]
[LocalizedAttribute("Password")]
public string Password { get; set; }
//------------------------------------------------------------//
[DataType(DataType.Password)]
[Compare("Password", ErrorMessageResourceType = typeof(MAHAL_E_MA_Model.Properties.Resources), ErrorMessageResourceName = "ErrorConfirmPassword")]
[LocalizedAttribute("ConfirmPassword")]
public string ConfirmPassword { get; set; }
//------------------------------------------------------------//
[DataType(DataType.EmailAddress, ErrorMessageResourceType = typeof(MAHAL_E_MA_Model.Properties.Resources), ErrorMessageResourceName = "ErrorEmailInvalid")]
[MaxLength(20)]
[RegularExpression(@"[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}")]
[LocalizedAttribute("Email")]
public string Email { get; set; }
//------------------------------------------------------------//
[MaxLength(30)]
[LocalizedAttribute("Title")]
public string Title { get; set; }
//------------------------------------------------------------//
[MaxLength(10)]
[LocalizedAttribute("HireDate")]
public int HireDate { get; set; }
//------------------------------------------------------------//
[LocalizedAttribute("ReportsTo")]
public long ReportsTo { get; set; }
[ForeignKey("ReportsTo")]
public virtual IList<User> ReportsChild { get; set; }
}
public class City
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int CityID { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(20)]
[LocalizedAttribute("Name")]
public string Name { get; set; }
//------------------------------------------------------------//
[LocalizedAttribute("PhoneCode")]
public int PhoneCode { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(10)]
public int ModifiedDate { get; set; }
}
public class CityUser
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int CityUserID { get; set; }
//------------------------------------------------------------//
[Required]
public long ModifiedByUserID { get; set; }
[ForeignKey("ModifiedByUserID")]
public virtual User OperatorUser { get; set; }
//------------------------------------------------------------//
[Required]
public int CityID { get; set; }
[ForeignKey("CityID")]
public virtual City City { get; set; }
}
但是当EF5用于创建数据库时,前面提到的错误就出来了! 我该怎么办?我已经阅读了很多关于数据模型的博客的博客。但仍然无法解决这个错误....顺便说一句,我想用 DataAnnotations 声明关系。 / p>
现在有谁能让我摆脱这个问题??? !!!! :(
此致
答案 0 :(得分:4)
最后,我可以在接下来的几个小时和很多的努力下过来,通过这种方式永远不会忘记这个概念! :d 解决方案发现:
modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>();