Я так запутался !!! Это мой первый раз с использованием 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.
Теперь есть кто-нибудь, кто может избавить меня от этой проблемы ??? !!!! :(
С уважением,
Имеет ли значение ошибка: если город будет удален из таблицы City, запись/s, связанная с CityID в таблице CityUser, также будет удалена? Если это так, я не знаю, как с этим справиться. Я использовал для обработки этого в программировании, например, по мере того, как вызывается метод Delete, во-первых, я рассматривал, есть ли у записи какие-либо дети. Я понятия не имею в коде первым !!! Пожалуйста, помогите ... – user2394196
В нем говорится, что существует много ссылок на «CityId», т.е. Man [, User], и пользователь города ссылается на «Город» через «CityId», поэтому он просит указать действия «ON DELETE» и 'ON UPDATE» поскольку он не может автоматически их вывести. – Saravanan
Хорошо .. позвольте мне спросить вас .. Должен ли я определять свойство навигации для родительского класса, например, public virtual ICollection CityUsers {get; set;} ??? Разве это имеет значение? Правильно ли я определил внешние ключи? Есть идеи? –
user2394196