模型1 - 此模型位於開發服務器上的數據庫中。 Model #1 http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.pngC# - 實體框架 - 瞭解一些基本知識
Model#2 - 此模型位於Prod服務器的數據庫中,並且每天都通過自動提要進行更新。 alt text http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/4260259f-bce6-43d5-9d2a-017bd9a980d4/Model2.png
我已經寫了什麼應該是一些簡單的代碼來同步我的飼料(模型#2)到我的工作數據庫(模型#1)。請注意,這是原型代碼,模型可能不像應該那樣漂亮。此外,進入鏈接數據模型#1(主要是ClientID)是一個手動過程,這就是爲什麼我寫這個簡單的同步方法。
private void SyncFeeds()
{
var sourceList = from a in _dbFeed.Auto where a.Active == true select a;
foreach (RivWorks.Model.NegotiationAutos.Auto source in sourceList)
{
var targetList = from a in _dbRiv.Product where a.alternateProductID == source.AutoID select a;
if (targetList.Count() > 0)
{
// UPDATE...
try
{
var product = targetList.First();
product.alternateProductID = source.AutoID;
product.isFromFeed = true;
product.isDeleted = false;
product.SKU = source.StockNumber;
_dbRiv.SaveChanges();
}
catch (Exception ex)
{
string m = ex.Message;
}
}
else
{
// INSERT...
try
{
long clientID = source.Client.ClientID;
var companyDetail = (from a in _dbRiv.AutoNegotiationDetails where a.ClientID == clientID select a).First();
var company = companyDetail.Company;
switch (companyDetail.FeedSourceTable.ToUpper())
{
case "AUTO":
var product = new RivWorks.Model.Negotiation.Product();
product.alternateProductID = source.AutoID;
product.isFromFeed = true;
product.isDeleted = false;
product.SKU = source.StockNumber;
company.Product.Add(product);
break;
}
_dbRiv.SaveChanges();
}
catch (Exception ex)
{
string m = ex.Message;
}
}
}
}
現在的問題:
- 在型號#2,對於汽車類結構缺少客戶端ID(見紅色圓圈區域)。現在,我學到的一切,EF創建了一個子類的Client,我應該能夠在子類中找到ClientID。然而,當我運行我的代碼時,source.Client是一個NULL對象。我期待EF不能做什麼?有沒有一種方法來正確填充子類?
- 爲什麼EF在父表中隱藏子實體ID(在這種情況下是ClientID)?有什麼方法可以揭露它嗎?
- 還有什麼像諺語疼拇指伸出?
TIA
對不起您的損失。 [Linkrot](http://content.screencast.com/users/Keith.Barrows/folders/Jing/media/bdb2b000-6e60-4af0-a7a1-2bb6b05d8bc1/Model1.png)是生活的一部分。對我們的數字化歷史構成巨大威脅。 – 3yanlis1bos 2013-03-07 13:15:17