![](/img/trans.png)
[英]how can i change table name by fluent API of entity framework code first in c#?
[英]How to code (first) the following ternary relationship in MVC Entity Framework C# with fluent API?
UPDATE
看來我沒有讓自己明白。 我可能錯誤地選擇了問題。 所以我將嘗試另一個例子,希望能夠更好地說明我的問題。
新例子: 狗品種 - 疾病 - 醫學。
狗的品種可能受到幾種疾病的影響。
同一種疾病可以影響幾種犬種。
對於某種狗品種,一種葯對一種或多種疾病有效
一種葯對一種或多種治療某種疾病的狗有效
以下代碼可以正常使用EF在DogBreed和Disease之間創建查找表,如下圖所示:
[Table("dog_breed")]
public DogBreed (){
public int ID { get;set; }
public string DogBreedName { get;set; }
public IList<Disease> Diseases { get; set; }
}
[Table("disease")]
public Disease (){
public int ID { get;set; }
public string DiseaseName { get;set; }
public IList<DogBreed> DogBreeds { get; set; }
}
我想知道如何將實體葯物添加到我的項目中,如下所示,並獲得EF生成下圖中顯示的方案。
代碼可能是這樣的:
[Table("medicine")]
public Medicine (){
public int ID { get;set; }
public string MedicineName { get; set; }
public Lookup<DogBreed,Disease> { get;set; }
}
但這並不會產生所需的方案。 我該怎么辦?
我想澄清一下,我的疑問是如何使代碼自動生成我想要的數據庫結構,這樣我就可以無縫地使用實體框架功能,因此所有解決方案都意味着手動在數據庫上創建表,或者改變結構(已經考慮過,即定義一個新的類。 我不是在尋找如何繞過這個問題的建議。
我有一個簡單的三元關系,其中三個實體相關,正如我在下面描述的一個例子中為我的具體問題做了解釋。 問題是我不知道如何鍵入代碼,以獲得我期望它們在我的數據庫中的表。
實體:學生,科目,課堂。
因此,這可以很容易地在一個單獨的表格中相關聯,該表格將如下三個相關聯,其中學生1將在課堂2中學習主題13的課程。
這是我在以下列方式編碼時觀察到的二元關系的行為:
[Table("student")]
public class Student
{
[Key]
public int ID {get; set;}
public List<Subject> Subjects;
}
[Table("subject")]
public class Subject
{
[Key]
public int ID {get; set;}
public List<Student> Students;
}
在這種情況下,當我運行Add-Migration和Update-Database時,我得到一個表studentsubject,其中包含兩個實體的id,並自動關聯多對多關系。
那么,如果可能的話,如果要獲得具有3個字段的中間表的關系,那么對類進行編碼的方法是什么? 。 收藏,屬性,班級詞典......?
- 我的例子的真實設計是在第一個列表中添加以下類:
[Table("classroom")]
public class Classroom
{
[Key]
public int ID {get; set;}
public KeyValuePair<Student, Subject> StudentSubject;
}
暫時我將創建一個代表三元關系的課程,雖然我覺得這不符合KISS原則。
沒有必要直接在“課堂”對象中提及“學生”,因為它有一個“科目”列表和“科目”本身有一個“學生”列表
這是錯的:
public KeyValuePair<Student, Subject> StudentSubject
;
這意味着在“主題”對象中插入一次學生主題一次,在課堂中插入一次“再次”,為什么?!
你必須有這樣的東西,EF會做出神奇的事:
[Table("classroom")] public class Classroom { [Key] public int ID {get; set;} public List<Subject> Subject; }
每個科目都是您每個課堂的學生
List<Student> classroomSubjectStudents = classroom.Subjects .Where(x=>x == someSubject) .Select(x=>x.Students).ToList();
經過一段時間的搜索並等待一段時間后,我又回到了學校,並且:
根據定義,良好規范化的關系是二元關系。 因此,示例中描述的三元關系不會首先與代碼一起使用,然而關系的本質使得形成它的二元關系(狗品種 - 醫學,醫學 - 疾病,狗品種 - 疾病)重要到足以形成實體他們自己的。
根據您的問題,您應該選擇一個來形成一個實體。 所以這個問題的答案是......
要首先利用實體框架和代碼,為了編寫三元關系,您必須將兩個部分之間的關系作為實體本身。
[Table("dog_breed")]
public DogBreed (){
public int ID { get; set; }
public string DogBreedName { get; set; }
public List<PairMedicineDisease> PairsMedicineDisease { get; set; }
}
[Table("medicine")]
public Medicine (){
public int ID { get;set; }
public string MedicineName { get;set; }
}
[Table("disease")]
public Disease (){
public int ID { get;set; }
public string DiseaseName { get;set; }
}
[Table("pair_medicine_disease")]
public PairMedicineDisease (){
public int ID { get;set; }
public Disease Disease { get;set; }
public Medicine Medicine { get;set; }
}
感謝所有試圖提供幫助的人,特別感謝@ Gert Arnold ,他指出了我正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.