ASP.NET MVC 3 EF Code First - Проблемы с ИНОСТРАННЫМИ КЛЮЧАМИ - PullRequest
1 голос
/ 19 января 2012

У меня проблемы с созданием SQL Server ограничений внешнего ключа при первом использовании Entity Framework Code.

Это мой сценарий.Я создаю приложение, которое позволяет нам регистрировать билеты в любой из наших систем и автоматически назначать билет соответствующему лицу.

У нас есть Услуги, которые могут иметь много категорий.Категории могут иметь много подкатегорий.Сотрудник службы поддержки может быть назначен на «Служба», «Категория» или «Подкатегория».

Вот мои занятия:

Service.cs

public class Service
{
    [Key]
    public int ServiceID { get; set; }

    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }

    public virtual ICollection<Category> Categories { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}

Category.cs

public class Category
{
    [Key]
    public int CategoryID { get; set; }
    [ForeignKey("Service")]
    public int ServiceID { get; set; }

    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }

    public virtual Service Service { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }
}

Subcategory.cs

public class Subcategory
{
    [Key]
    public int SubcategoryID { get; set; }
    [ForeignKey("Service")]
    public int ServiceID { get; set; }
    [ForeignKey("Category")]
    public int CategoryID { get; set; }

    public string Title { get; set; }
    public DateTime CreatedDate { get; set; }
    public HelpDeskMember CreatedBy { get; set; }
    public DateTime? DeletedDate { get; set; }
    public HelpDeskMember DeletedBy { get; set; }

    public virtual Service Service { get; set; }
    public virtual Category Category { get; set; }
    public virtual ICollection<HelpDeskMember> LinesOfSupport { get; set; }       
}

и, наконец, HelpDeskMember.cs

public class HelpDeskMember
{
    public int HelpDeskMemberID { get; set; }
    public string Name { get; set; }
    public bool Admin { get; set; }
    public bool Available { get; set; }
    public DateTime? CreatedDate { get; set; }
    public DateTime? LastLogin { get; set; }
    public DateTime? DeletedDate { get; set; }
    public DateTime? DeletedBy { get; set; }

    public virtual ICollection<Service> Services { get; set; }
    public virtual ICollection<Category> Categories { get; set; }
    public virtual ICollection<Subcategory> Subcategories { get; set; }

}

При инициализации базы данных появляется следующее сообщение об ошибке:

Введение ограничения FOREIGN KEY 'Subcategory_Service' в таблицу 'Subcategories' может привести к возникновению циклов или нескольких каскадных путей.Укажите ON DELETE NO ACTION или ON UPDATE NO ACTION, либо измените другие ограничения FOREIGN KEY.Не удалось создать ограничение.Смотрите предыдущие ошибки.

Я предполагаю, что проблема в том, как я определил Key и ForeignKey.Любая помощь приветствуется.Спасибо.

1 Ответ

1 голос
/ 19 января 2012

В зависимости от ваших потребностей. Вы можете в конфигурации для вашей сущности использовать WillCascadeOnDelete(false) 1 или глобально удалить OneToManyCascadeDeleteConvention 2 .

Оба могут быть установлены в OnModelCreating с использованием входного параметра ModelBuilder.

...