Örnek yapısıVarlık Framework yinelenen nesne ve tüm alt özellikleri
public class Page
{
public int PageId { get; set; }
public string Prop1 { get; set; }
public string Prop2 { get; set; }
public virtual List<Section> Sections { get; set; }
}
public class Section
{
public int SectionId { get; set; }
public int PageId { get; set; }
public virtual Page Page { get; set; }
public virtual List<Heading> Headings { get; set; }
}
public class Heading
{
public int HeadingId { get; set; }
public int SectionId { get; set; }
public virtual Section Section { get; set; }
}
Bu benim gerçek yapısı bundan daha fazla düzeylerine sahiptir ama bu başarmak için çalışıyorum açıklamak için yeterli olması gerektiğini belirtmek gerekir.
Yani ben o nesneyi Klon benimPage
nesne yük ve
Page
yani
Prop1
özelliklerine bazı küçük değişiklikler yapmak,
clonedPage
yapısında Yukarıdaki örnekte
Page pageFromDb = getPageMethod();
Page clonedPage = pageFromDb.Clone();
clonedPage.Prop1 = clonedPage.Prop1 + " Cloned";
addPageMethod(clonedPage); //Adds the page to db
Prop2
gayet iyi ve yeni Page
eklenir veritabanına. Ancak inanıyorum ki, çocuk nesnelere ait kimlikler belirlenir ve çocuklar arasındaki ilişki her zaman bire birdir. pageFromDb
özgün nesnesi, tüm yeni eklenen için yeni Section
nesneler oluşturmak yerine varlık çerçevesini varlık çerçeve olarak kaybedecektir.
Bunun için bir düzeltme olması vb foreach
, foreach
, ve yeni kayıtları foreach nesne yaratacak sonra varlık çerçevesini takmadan önce 0
tüm kimlikleri kuracak inanıyoruz. Bir varlık çerçeve ortamında bir nesneyi klonlamak için daha kolay/daha iyi bir yol var mı?
Clone yöntemi ne yapar? Derin bir kopya mı yapıyor? Kimlik Alanlarını kopyalamamanız söyler misiniz? Koleksiyonlarınız doğru olduğu sürece EF, ekleme işleminden sonra sizin için Ids'ı oluşturacaktır. – Tim
@Tim Sadece 'Sayfanın nesne düzeyinde AutoMapper'ı kullanarak. –
[Varlık Çerçevesi'nde verileri klonlama] olası kopyası (http://stackoverflow.com/questions/2185155/cloning-data-on-entity-framework) –