在对象之间复制值

本文关键字:复制 之间 对象 | 更新日期: 2023-09-27 18:11:42

我正在编写一个实用程序,将特定数据从后端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);

我遇到了问题,因为我在同一个命名空间中有来自远程和本地的模糊类型。

你知道怎么分吗?

在对象之间复制值

您只需要指定有歧义的对象的完整名称空间。例如:

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的自定义工具名称空间(关闭模型窗口)设置为不同的名称空间。

这对我来说很有效:-)