我遇到了這種情況,我不確定究竟是什麼正確的解決方法。我有一個多對多的表。將多對多表與其他表關聯的最佳做法是什麼?
ProductsTable <--------> DrugsTable
ProductsTable
|----- ProductID
|----- ProductName
DrugsTable
|----- DrugID
|----- DrugStrength
|----- GCNSeqNumber
的想法是,一個ProductName
可以有很多DrugStrength
或GCNSequNumber
,和一個GCNSeqNumber
可以有很多ProductName
。
所以,要創建這個,我創建的模型類,如下所示:
public class ProductsTable
{
public int ProductID { get;set; }
public string ProductName { get; set; }
public ICollection<DrugsTable> Drugs { get; set; }
public ProductsTable()
{
this.Drugs = new HashSet<DrugsTable>();
}
}
public partial class DrugsTable
{
public int DrugID { get; set; }
public string Strength { get; set; }
public string GCNSeqNo { get; set; }
public virtual ICollection<ProductsTable> Products { get; set; }
}
然後我映射它:
modelBuilder.Entity<ProductsTable>()
.HasMany(c => c.Drugs).WithMany(i => i.Products)
.Map(t => t.MapLeftKey("ProductID")
.MapRightKey("DrugID")
.ToTable("RxTable"));
到目前爲止好。 .NET創建另一個表,名爲RxTable
,並存儲來自DrugsTable
和ProductsTable
的ID。現在的問題是,RxTable
沒有id
字段。我需要另一個表格,其中包含有關索賠的基本信息(日期,人員等)。將另一個表與這些多對多表關聯的最佳做法是什麼?如果我手動創建RxTable
,.NET是否能夠自動填充表格?怎麼樣?
編輯響應於盧卡蓋爾西的反應制備:
RxTable的Rx =新RxTable();
ProductsTable Product = db.Products.Where(x => x.ProductName == productName).FirstOrDefault();
DrugsTable Drug = db.Drugs.Where(x => x.GCNSeqnumber == gcnSeqnumber).FirstOrDefault();
if (Product == null)
{
Product = AddProduct(productName);
}
if(Drug == null)
{
Drug = AddDrug(strength, gcnSeqnumber);
}
Rx = (RxTable)db.RxTable.Where(x => x.ProductId == Product.ProductId && x.DrugId == Drug.DrugId).FirstOrDefault();
if (Rx == null)
{
Rx.Drugs = Drug;
Rx.Products = Product;
db.RxTable.Add(Rx);
}
return Rx;
有趣。我會試一試並報告。謝謝。 – user1828605
我正在實施這一點,我認爲這是相當可以理解的。但是,我有一個問題,如果產品和藥品已經存在或不存在,在插入RxTable之前如何檢查?如果我可以做到這一點,請參閱我的編輯? – user1828605
是的,看起來不錯!還有一個建議:在RxTable上添加一個UNIQUE KEY約束(ProductID,DrugID,PersonID);這樣你就可以肯定,絕不會有重複的記錄:) –