我正在编写一个实用程序,用于将特定数据从后端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 :(得分:0)
您只需指定不明确的对象的完整名称空间。例如:
LocalNamespace.Something.Surveys localSurveys;
RemoteNamespace.Something.Surveys remoteSurveys;
您还可以使用别名导入命名空间:
using Local = LocalNamespace.Something;
using Remote = RemoteNamespace.Something;
Local.Surveys localSurveys;
Remote.Surveys remoteSurveys;
答案 1 :(得分:0)
不仅如此简单! 首先,我将代码生成策略从T4更改为Legacy ObjectContent。这可以在实体框架模型图中完成。我在服务设置的两端都这样做了。记得删除嵌套在.edmx下的两个.tt文件。然后我将.edmx的自定义工具命名空间(模型窗口关闭)设置为不同的命名空间。
这对我有用: - )