2016-02-19 25 views
0

我想知道如果這種情況下可能使用實體框架。C#添加一列到自動生成的表由實體框架

我使用代碼優先和如下定義域模型:

public class PrintJob 
{ 

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    [Key] 
    public int Id { get; set; } 

    public virtual ICollection<StockItem> stockItemstoPrint { get; set; } 

} 

如果我離開上述實體框架並沒有增加在StockItems模型中的外鍵添加遷移更新數據庫(我不想要,因爲我寧願沒有雙向鏈接)它會爲我創建一個名爲PrintJobStockItems的表,它將保存PrintJobID和StockItemID
- 但這很好,但我想知道如果我想用bool'Printed'將屬性添加到PrintJobStockItems中是否可以完成並具有更新該bool值的邏輯?原因是,我希望能夠爲每個單獨的庫存項目設置是否已打印 - 當然不是針對stockItem模型,因爲它不應該瞭解PrintJobs。

如果我不能實現這一點,這意味着我將不得不爲每個庫存項目創建一個打印作業,這對我來說並不理想。

回答

1

您不能訪問幕後連接表,但解決辦法是建立一個2至manys:

public class StockItem 
{ 
    public int Id { get; set; } // Identity, Key is default by convention so annotation not needed 
    public virtual ICollection<StockItemPrintJob> StockItemPrintJobs { get; set; } 
} 

public class PrintJob 
{ 
    public int Id { get; set; } // Identity, Key is default by convention 
    public virtual ICollection<StockItemPrintJob> StockItemPrintJobs { get; set; } 
} 

public class StockItemPrintJob 
{ 
    [Key, Column(Order = 0)] 
    public int StockItemId { get; set; } 

    [Key, Column(Order = 1)] 
    public int PrintJobId { get; set; } 

    public bool IsPrinted { get; set; } 

    public virtual StockItem StockItem{ get; set; } 
    public virtual PrintJob PrintJob { get; set; }} 
} 

然後,你可以這樣做

var item = context.StockItemPrintJob.First(sp => sp.StockItemId == stockId && sp.PrintJobId == printJobId); 
item.IsPrinted = true; 
context.SaveChanges(); 
+0

感謝。我沒有將StockItemPrintJobs的虛擬集合放在StockItem模型中,因爲我不希望StockItems知道PrintJobs。 – KyleK

相關問題