将数据从一个对象复制到另一个对象

时间:2011-01-17 11:59:48

标签: c#

喂 我想将数据从一个实体复制到另一个实体 我有这样的事情:

  MyEntity newEntity = new Entity()
  newEntity.Property1 = oldEntity.Property1 ....

有更简单的方法吗?我有很多属性,我想写一些类似newEntity = oldEntity的内容,但由于主键重复,这是不可能的

7 个答案:

答案 0 :(得分:2)

您可以使用AutoMapper

答案 1 :(得分:2)

你可以使用这样的代码:

EntityObject newObject = oldObject; context.Detach(NEWOBJECT); newObject.Id = 0; context.Entity.AddObject(NEWOBJECT); context.SaveChanges();

希望有所帮助:)

答案 2 :(得分:1)

好吧,通常我在这种情况下做的是编写一个构造函数,它接受相同类型的参数(在C ++中称为复制构造函数),所以你最终会得到这样的结果:

// Constructor
MyEntity(MyEntity other)
{
    this.Property1 = other.Property1;
    this.Property2 = other.Property2;
    // etc.
}

然后可以这样调用:

MyEntity entity = new MyEntity(oldEntity);

这也封装了属性复制行为,因此如果您向类中添加新属性,则只需在一个位置进行更改。

答案 3 :(得分:1)

另一个ASP.NET Futures有ModelCopier助手类。

ModelCopier.CopyModel(from, to);

答案 4 :(得分:0)

将Cloning构造函数添加到类中是很好的,但是如果你想要更快的东西那么 循环通过Type.GetFields()并使用FieldInfo将值从obj1设置为obj2。只需要小心引用的字段,然后你必须递归地执行它。

答案 5 :(得分:0)

添加此方法,一切正常!

private static void CopyPropertyValues(object source, object destination)
{
    var destProperties = destination.GetType().GetProperties();

    foreach (var sourceProperty in source.GetType().GetProperties())
    {
        foreach (var destProperty in destProperties)
        {
            if (destProperty.Name == sourceProperty.Name &&
        destProperty.PropertyType.IsAssignableFrom(sourceProperty.PropertyType))
            {
                destProperty.SetValue(destination, sourceProperty.GetValue(
                    source, new object[] { }), new object[] { });

                break;
            }
        }
    }
}

答案 6 :(得分:0)

@Nadeem_MK答案也有效......我添加了一个CanWrite标志来处理Readonly属性。抱歉无法评论他的回答,因为我没有足够的推荐点。

<Picker x:Name="pickerIn">
  <Picker.Items>
    <x:String>In - A</x:String>
    <x:String>In - B</x:String>
    <x:String>In - C</x:String>
  </Picker.Items>
</Picker>
<Label IsVisible="False" Text="{Binding Source={x:Reference pickerIn}, Path=SelectedIndex,StringFormat='The picker inside of TableView has index={0}'}" />