模型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