喂 我想将数据从一个实体复制到另一个实体 我有这样的事情:
MyEntity newEntity = new Entity()
newEntity.Property1 = oldEntity.Property1 ....
有更简单的方法吗?我有很多属性,我想写一些类似newEntity = oldEntity
的内容,但由于主键重复,这是不可能的
答案 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}'}" />