我一直在搜索論壇和存儲庫模式博客,瞭解我應該如何編碼我的項目,並堅持下來。任何從你們的幫助或指導將非常認真:)MVC腳手架與存儲庫模式 - 將兒童物品保存爲交易
我開始我的項目作爲EF5 MVC4 Razor Code First,並決定使用MVCScaffolding來生成我所有的控制器,視圖和存儲庫。這是我使用這些技術的第一個項目,我剛纔被告知這就是團隊現在這樣做的過程(但之前的開發人員確實先建模並手動編寫了他們的上下文)。我們正在編碼一堆屏幕,但我們的一個屏幕是一個複雜的屏幕,涉及許多模型/子模塊(即/對象模型具有FK到響應,附件,審閱者等等)。 ...)。用戶添加一堆數據,選擇一個或多個評論者,添加0個或更多附件。然後他們擊中保存!
現在我的大問題是,我想將所有這些數據保存爲一個事務,並且如果某個子模型(即/附件)失敗,事務將回滾。 然而,,創建MVCScaffolding存儲庫的方式,每個模型都有它自己的DB上下文實例,並且它是自己的Save。控制器接受每個唯一的存儲庫作爲加載屏幕數據的參數。另外需要注意的是,在此屏幕中,我們使用ViewModel加載數據,然後編寫自定義映射器以映射回不同模型進行保存。我們可以分別保存每一部分,可能解決方案只是將我的保存包裝到TransactionScope中,但我也想減少對數據庫的調用次數,因爲每個存儲庫都會保存一個調用。
我以爲我可以將代碼添加到父存儲庫的UnitOfWork類型保存,它可以在一個上下文對象中添加/編輯所有子對象,但這看起來像是比任何東西都更加黑客,並且我想要正確編寫代碼。
這裏的其他項目之一隻是做了一個自定義的數據庫上下文,所有的Save方法都在這個類中,這是做到這一點的最好方法嗎?另一個開發人員首先編碼,但手工編碼所有的Save方法。他們都沒有在一個標準的地方,他在內部使用DBContext的TransactionScope(是過度殺傷或DBContext不處理交易)?
因爲我對此很陌生,所以我需要幫助,沒有人和我一起工作似乎同意採用適當的方法。我不確定我的模型對於「MVC應用程序」是否是錯誤的,因爲我是一個數據庫沉重的思考者。
下面是我的模型樣本,任何指導表示讚賞。謝謝:)
public class Anomaly
{
[Key]
public int AnomalyId { get; set; }
public string Subject { get; set; }
public int PlantId { get; set; }
[ForeignKey("PlantId")]
public virtual Plant Plant { get; set; }
public DateTime? ReviewByDate { get; set; }
public virtual ICollection<AnomalyReviewer> AnomolyReviewers { get; set; }
public virtual ICollection<AnomalyAttachment> AnomalyAttachments { get; set; }
}
public class AnomalyAttachment
{
[Key]
public int AnomalyAttachmentId { get; set; }
public int AnomalyId { get; set; }
[ForeignKey("AnomalyId")]
public virtual Anomaly Anomaly { get; set; }
public string FilePath { get; set; }
public string FileName { get; set; }
public string FileExtension { get; set; }
public string Notes { get; set; }
}
ps。這只是一個示例...謝謝!