2015-09-07 30 views
0

我正在編寫一個實用程序,將特定數據從後端SQL數據庫複製到客戶端計算機SQL Express數據庫。後端數據庫和客戶端數據庫是相同的。這些數據適用於沒有網絡的遠程站點的測量員。 我正在使用REST服務並在服務和代理上使用實體框架。我正在複製這個代碼的屬性值:在對象之間複製值

private void GatherFrom<TSelf, TSource>(TSelf self, TSource source) 
{ 
    PropertyInfo[] sourceAllProperties = source.GetType().GetProperties(); 

    foreach (PropertyInfo sourceProperty in sourceAllProperties) 
    { 
     PropertyInfo selfProperty = self.GetType().GetProperty(sourceProperty.Name); 
     if (selfProperty.CanRead 
      && (selfProperty.GetSetMethod(true) != null && !selfProperty.GetSetMethod(true).IsPrivate) 
      && (selfProperty.GetSetMethod().Attributes & MethodAttributes.Static) == 0 
      && selfProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType)) 
     { 
      var sourceValue = sourceProperty.GetValue(source); 
      selfProperty.SetValue(self, sourceValue); 
     } 
    } 
} 

這工作都很好。

但是當我申請新的數據:

Surveys newSurvey = new Surveys(); 

GatherFrom(newSurvey, survey); 

localSurveys.Add(newSurvey); 

我進入的問題,因爲我有曖昧類型的遠程和在同一個命名空間的本地。

任何想法如何分裂它?

+0

使用完整的命名空間。 – Maarten

回答

0

您只需指定不明確的對象的完整名稱空間。例如:

LocalNamespace.Something.Surveys localSurveys; 
RemoteNamespace.Something.Surveys remoteSurveys; 

您也可以使用別名命名空間導入:

using Local = LocalNamespace.Something; 
using Remote = RemoteNamespace.Something; 

Local.Surveys localSurveys; 
Remote.Surveys remoteSurveys; 
+0

在實體框架中,調查具有對其他類的引用。當我嘗試添加調查時,調查值應用OK,但引用的數據類具有相同的名稱,實體框架因此錯誤停止:
CLR類型到EDM類型的映射不明確,因爲多個CLR類型與EDM類型'ReferencedClass'相匹配。以前發現CLR類型'Namespace.DataClient.ReferencedClass',新發現CLR類型'Namespace.DataClient.SurveyServiceReference.ReferencedClass'。 –

+0

將不同的EDM類型設置爲完全不同的名稱空間。 – DavidG

0

這不只是這麼簡單! 首先,我將代碼生成策略從T4更改爲Legacy ObjectContent。這可以在實體框架模型圖中完成。我在服務設置的兩端都這樣做了。請記住刪除嵌套在.edmx下的兩個.tt文件。然後,我將.edmx的自定義工具名稱空間(模型窗口關閉)設置爲不同的名稱空間。

這對我有效:-)