2012-09-13 176 views
3

我想在代碼中第一次編碼以下...因爲我剛剛開始我不能..請幫助..在此先感謝
1.學生:學生將有學生證,名字,姓
學生應該屬於一類和一個部分(基本上一個與每個實體一個關係)
2類:類將有CLASSID,名稱
類應該具有的集合學生和部門的集合(基本上與每個實體有多對多的關係)
3.部分:部分將有SectionID,名稱
Sectio n應屬於一類,應該有學生(帶班,基本上以一對一的關係之一,與許多學生的關係)的集合
下面是相同實體框架asp.net MVC外鍵

Students.cs代碼

public class Students 
{ 
    public int StudentsId { get; set; } 
    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
    public decimal Grade { get; set; } 
    public int ClassesId { get; set; } 
    public Classes Classes { get; set; } 
    public int SectionsId { get; set; } 
    public Sections Sections { get; set; } 
} 

Classes.cs

public class Classes 
{ 
    public int ClassesId { get; set; } 
    public string Name { get; set; } 

    public ICollection<Sections> Sections { get; set; } 
} 

Sections.cs

public class Sections 
{ 
    public int SectionsId { get; set; } 
    public string Name { get; set; } 
    public int ClassesId { get; set; } 

    public Classes Classes { get; set; } 
    public ICollection<Students> Students { get; set; } 
} 

如果我這樣做,我得到錯誤說:

引進國外KEY約束 「FK_dbo.Sections_dbo.Classes_ClassesId」表「節」可能會導致 循環或多個級聯路徑。指定ON DELETE NO ACTION或ON UPDATE NO ACTION,或修改其他FOREIGN KEY約束。

我知道我可以使用流利的API擺脫​​這個錯誤,並告訴不要級聯刪除,但我不想這樣做。有沒有其他解決方案?請幫助

回答

1

對於您當前的模型,不,除禁用某些關係的casdading刪除之外別無他法。

你所有的關係都是必需的,這意味着,如果一個類被刪除,你刪除的部分和類的學生(Classes有學生的不暴露集合由於所需導航性能ClassesStudents)。但是,如果部分被刪除,該部分的學生也會被刪除 - 這是第二個刪除路徑Students

我不知道你的模型的確切含義,但對我來說,如果刪除類,刪除一個類的所有學生聽起來很奇怪。一個學生總是必須有一個班級,或不能暫時沒有班級分配(以及部門分配)?也許這個學生有半年的假期學期,不參加任何課程?

在這種情況下,您可以使關係Students可選。正如可空聲明外鍵的屬性:

public class Students 
{ 
    //... 
    public int? ClassesId { get; set; } 
    public Classes Classes { get; set; } 
    public int? SectionsId { get; set; } 
    public Sections Sections { get; set; } 
} 

這將解決您的多個級聯刪除問題,因爲默認情況下可選的關係在Students類路徑沒有級聯刪除功能。ClassesSections之間的關係仍然是必需的,所以刪除一個類將刪除屬於該類的所有部分,但它不會再刪除學生。

+0

其實這個想法是創建一個學校結構......在學校裏有不同的班級......每個班級都有不同的部分。第一標準部分A,第一標準部分B,第二標準部分A,第二標準部分B,第二標準部分C等等。這裏的學生實際上屬於一個部分,部分屬於一個班級,但最終學生也屬於班級,班級將有在學生的代碼次數中提及,所以我覺得必須有一種關係。如果有其他方式來定義這種關係,請幫助。 –

+0

只是想補充一點...這裏的班級規模很大,所以他們分爲幾個部分...例如,如果有80個學生在第一個標準,那麼他們將有40個學生分別在兩個部分A和B在第一標準......在這裏,如果學生在學校註冊,則必須屬於一個班級,並且如果班級具有班級,則該班級應該屬於班級內的一個部分...如果某個部分被刪除,則學生應該轉到班級的默認部分。 ..說部分A ..這將是偉大的,如果你可以幫助我的模型邏輯這個...謝謝你的答案。 :) –

+0

@AmitRaya:對我來說,聽起來你的模型其實很好。您只需要禁用「學生」和「類」之間以及「學生」和「部分」之間關係的級聯刪除。這不僅在技術上是必要的,而且從業務角度來看,級聯刪除對我來說聽起來是錯誤的:當一個類被刪除時,學生不應該被刪除,他們應該被分配給另一個類。 – Slauma