2013-05-25 4 views
4

Я так запутался !!! Это мой первый раз с использованием MVC3 и EF Code First. Я получаю следующее сообщение об ошибке:Циклы и несколько каскадных путей с использованием кода EF Сначала

Introducing FOREIGN KEY constraint 'FK_dbo.CityUsers_dbo.Cities_CityID' on table 'CityUsers' may cause cycles or multiple cascade paths. Specify ON DELETE NO ACTION or ON UPDATE NO ACTION, or modify other FOREIGN KEY constraints. Could not create constraint.

Я работал над этим в течение нескольких часов и сделал все, что мог, но просто не в состоянии справиться с этим!

Сценарий является то, что есть 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._%+-][email protected][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 идет для создания базы данных ошибка упоминалось ранее выходит !!! Что я могу сделать для этого? Я читал так много веб-журналов, что сделал некоторую поправку в Data Model. Но все равно не могу справиться с этой ошибкой ... Кстати, я хочу объявить отношения, используя DataAnnotations.

Теперь есть кто-нибудь, кто может избавить меня от этой проблемы ??? !!!! :(

С уважением,

+0

Имеет ли значение ошибка: если город будет удален из таблицы City, запись/s, связанная с CityID в таблице CityUser, также будет удалена? Если это так, я не знаю, как с этим справиться. Я использовал для обработки этого в программировании, например, по мере того, как вызывается метод Delete, во-первых, я рассматривал, есть ли у записи какие-либо дети. Я понятия не имею в коде первым !!! Пожалуйста, помогите ... – user2394196

+0

В нем говорится, что существует много ссылок на «CityId», т.е. Man [, User], и пользователь города ссылается на «Город» через «CityId», поэтому он просит указать действия «ON DELETE» и 'ON UPDATE» поскольку он не может автоматически их вывести. – Saravanan

+0

Хорошо .. позвольте мне спросить вас .. Должен ли я определять свойство навигации для родительского класса, например, public virtual ICollection CityUsers {get; set;} ??? Разве это имеет значение? Правильно ли я определил внешние ключи? Есть идеи? – user2394196

ответ

4

Наконец, я мог бы прийти через это после нескольких часов и много усилий и таким образом никогда не будет и никогда не забудет концепцию !!!: D Решение найдено:

modelBuilder.Conventions.Remove<OneToManyCascadeDeleteConvention>(); 
Смежные вопросы