[英]Entity Framework updating two databases
正如我在其他幾個問題中提到的那樣,由於我們的數據庫可以支持它,所以我目前正在嘗試用Entity Framework替換自家的ORM。
目前,我們有一定的對象設置,使得它們映射到我們的內部數據庫中的表和數據庫中的表運行我們的網站(這是不是即使在同一個國家,如果單獨讓同一台服務器上)。 因此,例如:
Part p = new Part(12345);
p.Name = "Renamed part";
p.Update();
將同時更新內部數據庫和Web數據庫,以反映ID為12345的零件現在被命名為“重命名零件”。 這種邏輯暫時只需要走一個方向(內部->網絡)。 我們通過LINQ-to-SQL DBML及其對象訪問Web數據庫。
我認為我的問題分為兩個部分,盡管我可能沒有一開始就提出正確的問題。
.SaveChanges()
和它命中數據庫之間插入邏輯? 聽起來像是Sql Server復制的工作 。
您不需要像問題2那樣將兩者相互連接在一起。只需將兩個單獨的數據庫具有自己的EF或L2S模型,然后使用具有域對象的存儲庫將它們抽象化即可。
這就是我最終要解決的問題。 請注意, IAdvantageWebTable
的實現是從現有的基類繼承的,因此,一旦將T4模板修改為正確繼承,對於基於EF的類就無需進行任何特殊處理。
public partial class EntityContext
{
public override int SaveChanges(System.Data.Objects.SaveOptions options)
{
var modified = this.ObjectStateManager.GetObjectStateEntries(EntityState.Modified | EntityState.Added); // Get the list of things to update
var result = base.SaveChanges(options); // Call the base SaveChanges, which clears that list.
using (var context = new WebDataContext()) // This is the second database context.
{
foreach (var obj in modified)
{
var table = obj.Entity as IAdvantageWebTable;
if (table != null)
{
table.UpdateWeb(context); // This is IAdvantageWebTable.UpdateWeb(), which calls all the existing logic I've had in place for years.
}
}
context.SubmitChanges();
}
return result;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.