簡體   English   中英

將數據從一個對象復制到另一個

[英]Copy data from one object to another

嘿,我想將數據從一個實體復制到另一個實體。
我有這樣的事情:

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

有沒有更簡單的方法可以做到這一點? 我有很多屬性,我想寫一些類似newEntity = oldEntity東西,但是由於主鍵重復,所以這是不可能的

您可以使用AutoMapper

您可以使用如下代碼:

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

希望能幫助到你 :)

好吧,通常我在這種情況下要做的是編寫一個構造函數,該構造函數使用相同類型的參數(在C ++中將稱為復制構造函數),因此您可能會得到如下所示的結果:

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

然后可以這樣稱呼:

MyEntity entity = new MyEntity(oldEntity);

這也封裝了屬性復制行為,因此,如果將新屬性添加到類中,則只需要在一個地方進行更改即可。

另一個ASP.NET Futures具有ModelCopier幫助器類。

ModelCopier.CopyModel(from, to);

添加此方法,一切正常!

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;
            }
        }
    }
}

@Nadeem_MK答案也適用...只是我添加了CanWrite標志來處理只讀屬性。 對不起,我無法對他的回答發表評論,因為我沒有足夠的反對意見。

 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))
                    {
                        if(destProperty.CanWrite)
                        { 
                          destProperty.SetValue(destination, sourceProperty.GetValue(
                                source, new object[] { }), new object[] { });
                        }
                        break;
                    }
                }
            }
        }

向類添加Cloning構造函數是很好的,但是如果您想要更快的速度,則遍歷Type.GetFields()並使用FieldInfo將值從obj1設置為obj2。 只要注意引用的字段,然后就必須遞歸地進行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM