Множество цикли на рамка на обект от първи подход на код

public class Admission
{
    [Required]
    public int AdmissionId { get; set; }

    [Required]
    public int SscInformationId { get; set; }

    [Required]
    public int HscInformationId { get; set; }

    public SscInformation SscInformation { get; set; }

    public HscInformation HscInformation { get; set; }
 }

public class HscInformation
{
    [Required]
    public int HscInformationId { get; set; }

    [Required]
    public int EducationBoardId { get; set; }

    [Required]
    public int RollNumber { get; set; }

    [Required]
    public int PassingYear { get; set; }

    public EducationBoard EducationBoard { get; set; }
}

public class SscInformation
{
    [Required]
    public int SscInformationId { get; set; }

    [Required]
    public int EducationBoardId { get; set; }

    [Required]
    public int RollNumber { get; set; }

    [Required]
    public int PassingYear { get; set; }

    public EducationBoard EducationBoard { get; set; }
}

public class EducationBoard
{
    [Required]
    public int EducationBoardId { get; set; }

    [Required(ErrorMessage = "Education Board Name is required.")]
    [Display(Name = "Education Board Name")]
    public string EducationBoardName { get; set; }
}

Това е моят модел на данни. Когато се опитвам да създам база данни, като използвам първия подход на код в рамка на обект, ми дава следната грешка:

Въвеждането на ограничение на FOREIGN KEY 'FK_dbo.SscInformations_dbo.EducationBoards_EducationBoardId' в таблица 'SscInformations' може да причини цикли или множество каскадни пътища. Посочете ON DELETE NO ACTION или ON UPDATE NO ACTION или променете други ограничения на FOREIGN KEY. Не може да се създаде ограничение или индекс. Вижте предишни грешки.

Как мога да разреша това??


person Mahedi Sabuj    schedule 28.11.2014    source източник


Отговори (1)


И SscInformation, и SscInformation имат задължителен EducationBoard (тъй като EducationBoardId се изисква). Това означава, че тези асоциации имат каскадно изтриване, разрешено по подразбиране.

Така че да предположим, че имате EducationBoard, което е посочено от SscInformation и SscInformation. Ако изтриете това EducationBoard, каскадното изтриване също би искало да изтрие тези препращащи обекти. Това е път с множество каскади.

Това е ограничение на Sql Server да не позволява множество (или кръгови) каскадни пътища, така че се появява SqlException, докато EF се опитва да изгради базата данни.

Трябва да направите поне една от асоциациите некаскадна, напр.

modelBuilder.Entity<SscInformation>()
    .HasRequired(s => s.EducationBoard).WithRequiredDependent()
    .WillCascadeOnDelete(false);

OnModelCreating отмяната на контекста.)

person Gert Arnold    schedule 29.11.2014
comment
Благодаря @Gert Arnold. Работи. Но прави връзка едно към много между „SscInformation“ и „EducationBoard“. Искам да направя връзка едно към едно между това. Има ли някакъв начин за това?? - person Mahedi Sabuj; 29.11.2014