C# 克隆Enity框架POCO

C# 克隆Enity框架POCO,c#,.net,entity-framework-6,poco,C#,.net,Entity Framework 6,Poco,我需要将实体框架对象克隆到新对象中,以便将其保存到数据库中。 有没有简单的方法可以做到这一点而无需思考? 如果反射是唯一的方法,那么请为我发布一些代码 这里的问题 是使用序列化,我不认为有必要这样做,而且答案是不使用DbContext,所以它与我的问题完全无关 这是我编写的用于填充两个对象的公共值的扩展方法的示例 public static void PopulateInto( this object source, object target,

我需要将实体框架对象克隆到新对象中,以便将其保存到数据库中。
有没有简单的方法可以做到这一点而无需思考?
如果反射是唯一的方法,那么请为我发布一些代码

这里的问题 是使用序列化,我不认为有必要这样做,而且答案是不使用DbContext,所以它与我的问题完全无关


这是我编写的用于填充两个对象的公共值的扩展方法的示例

    public static void PopulateInto(
        this object source,
        object target,
        BindingFlags flags)
    {
        foreach (var pi in source.GetType().GetProperties(flags))
        {
            var tpi = target.GetProperty(pi.Name, flags);

            if (tpi.IsNotNull())
            {
                try
                {
                    object originalValue;
                    object value = originalValue = source.GetValue<object>(pi.Name, new object[0], flags);
                    try
                    {
                        value = Convert.ChangeType(originalValue, tpi.PropertyType);
                    }
                    catch
                    {
                    }
                    tpi.SetValue(target, value, new object[0]);
                }
                catch
                {
                }
            }
        }
    }
公共静态void PopulateInto(
此对象源,
目标,,
BindingFlags(标记)
{
foreach(source.GetType().GetProperties(标志)中的var pi)
{
var tpi=target.GetProperty(pi.Name,标志);
if(tpi.IsNotNull())
{
尝试
{
客体本源价值;
object value=originalValue=source.GetValue(pi.Name,新对象[0],标志);
尝试
{
value=Convert.ChangeType(原始值,tpi.PropertyType);
}
抓住
{
}
tpi.SetValue(目标、值、新对象[0]);
}
抓住
{
}
}
}
}

我找到了一个很好的转机

如果尝试MemberwiseClone()获取该对象的副本,然后将该对象添加到上下文和SaveChanges()中,则会出现错误,因为 MemberwiseClone()也会克隆动态代理

所以轮到我了

仅为克隆目的创建新上下文。
那就做吧

ctx.Configuration.ProxyCreationEnabled=false

Customer copy=ctxClone.Customers.Find(2.copy)()

复制这里是您定义的方法,它只在下面调用MemberwiseClone

那就做吧

ctx.Customers.Add(复印件); ctx.SaveChanges()

这是我找到的处理这个问题的最接近的方法

如果你更喜欢反射解决方案,那就试试吧


仅供参考,如果您在其他代码中ProxyCreationEnabled=false,您将失去更改跟踪和延迟加载,因此请小心

可能是重复的,您懒得发布解决方案?或者你不知道?我希望有一个自动的人工智能系统来删除垃圾评论。我想念lmgtfy-很多非反射选项。我会根据你的需要添加automapper。当然:“所以:一个你发布你的愿望,其他人实现它的地方”。事实上,为了进一步教育你们,为了我们的共同利益,我将利用这个机会向你们指出一个很好的解释:。感谢夏普忍者的出色贡献。