2009-11-20 10 views
8

Varlık Çerçevesini kullanıyorum ve varlıkların kullanılması Veritabanı temsili VE iş nesnesi.
Yani, manipüle edilen bazı varlıkların her zaman bağlamdan ayrılmaları gerektiği anlamına gelir.Objeleri otomatik olarak iliştirmek için Varlık Çerçevesi'ni engelle

Veritabanından veri okuyup yazmayı başarabildim ama güncelleme yaparken küçük bir sorun yaşıyorum:
Bir tabloya "Depo" bağlı bir tablo "Depo" var. (... tarih)

  • yeni nesne Stok oluşturulur ve bunun alanları bazı değerlerle doldurulur: (daha fazla alan vardır, basitleştirilmiş, ancak ruh kalır)

    akım süreci bu biridir

  • Geçerli Depo (veritabanından tüm istek için çekilen nesne) stok nesnesi
  • ile ilişkilendirilmiştir; bu nesne kaydetmek için DAL yöntemine gönderilir.
  • DAL yöntemi, Stok öğesi öğesinin günlüğüne (aynı tarih, depo ve aynı tür) zaten var olup olmadığını denetler
  • Varsa, yöntem, çekilen nesneden sesi günceller ve değişiklikleri kaydeder.
  • Else, yeni Stock nesnesi eklenir. Burada

Sorun yeni Stok nesnesi oluşturmak ve Atölyesi'ne ilişkilendirmek zaman, nesne EntityState otomatik "Added" olarak ayarlanmış olmasıdır. Bu yüzden bir SaveChanges() ve Hisse senedi zaten mevcut olduğunda, satır güncellenir VE yeni bir Stok satırı eklenir ...
İstediğim şey, kendimi iliştirene kadar Yeni Stok nesnesinin Ayrılmasıdır. Bunun otomatik olarak gerçekleşmesini istemiyorum.

Bulduğum tek çözüm, nesne zaten mevcutsa, kaydetmeden önce yeni nesneyi bağlamdan ayırmaktır.
Ayrıca Warehouse nesnesini Detach() yapabilirim ama bu gerçek durumdaki gibi ilişkilendirilecek daha fazla öğe olduğunu düşündüğüm tatmin edici bir çözüm değildir ve Attach() ve Detach() ile oynamak için iyi bir fikir olduğundan emin değilim. onlar üzerinde.
Bu durumda, içeriği kendim için "Ekle" olana kadar, nesne yalnızca bir "Aktarım" nesnesidir ve bu bağlamdan uzak durmasını isterim.

Stok nesnesini nasıl uzak tutabileceğime dair bir fikriniz var mı?

Stock stk = new Stock(); 
stk.Date = DateTime.Now; 
stk.Volume = 100;   //so far stk is "Detached" and that's cool. 
stk.Warehouse = CurrentWarehouse; //stk become "Added" and that's less cool. 

DAL.Stock.Instance.Save(stk); 

Kaydet() in:

var existing = (from s in Context.CurrentContext.Stock 
where s.Warehouse.WarehouseId == stk.Warehouse.WarehouseId && s.Date == stk.Date && s.Type == 2 
select s).FirstOfDefault(); 

if(existing != null) 
{ 
    existing.Volume = stk.Volume; 
    Context.CurrentContext.Detach(stk); //I find it a stupid workaround !!!!!! 
} 
else 
{ 
    Context.CurrentContext.AddToStock(stk); //what I would want to do. 
} 

Context.CurrentContext.SaveChanges() 
+0

bana aynı! Bunu çözebildin mi? –

+0

Ne yazık ki hayır.Ve kullandığım geçici çözümü hatırlamıyorum. Sanırım POCO nesnelerini kullanmaya başladım. –

cevap

İlgili konular