C# 在对象之间复制值

C# 在对象之间复制值,c#,entity-framework,linq,reflection,C#,Entity Framework,Linq,Reflection,我正在编写一个实用程序,将特定数据从后端SQL数据库复制到客户端计算机SQL Express数据库。后端数据库和客户端数据库是相同的。这些数据是为那些前往没有网络的远程站点的测量员提供的。 我在服务和代理上使用REST服务和实体框架。我正在使用以下代码复制属性值: private void GatherFrom<TSelf, TSource>(TSelf self, TSource source) { PropertyInfo[] sourceAllProperties =

我正在编写一个实用程序,将特定数据从后端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);
        }
    }
}
我会遇到问题,因为我在同一命名空间中有来自远程和本地的不明确类型


知道如何拆分吗?

您只需要指定不明确对象的完整名称空间。例如:

LocalNamespace.Something.Surveys localSurveys;
RemoteNamespace.Something.Surveys remoteSurveys;
您还可以使用别名导入名称空间:

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

Local.Surveys localSurveys;
Remote.Surveys remoteSurveys;
这并不是那么简单! 首先,我将代码生成策略从T4更改为遗留ObjectContent。这可以在实体框架模型图中完成。我在服务设置的两端都这样做了。记住删除嵌套在.edmx下的两个.tt文件。然后我将.edmx的自定义工具名称空间(模型窗口关闭时)设置为不同的名称空间


这对我来说很有用:-)

使用完整的名称空间。在实体框架中,调查可以引用其他类。当我尝试添加调查时,调查值应用正常,但引用的数据类具有相同的名称,实体框架会因以下错误而停止:
CLR类型到EDM类型的映射不明确,因为多个CLR类型与EDM类型“ReferencedClass”匹配。以前找到的CLR类型为“Namespace.DataClient.ReferenceClass”,新找到的CLR类型为“Namespace.DataClient.SurveyServiceReference.ReferenceClass”。将不同的EDM类型模式化为完全不同的命名空间。
using Local = LocalNamespace.Something;
using Remote = RemoteNamespace.Something;

Local.Surveys localSurveys;
Remote.Surveys remoteSurveys;