Bu özel hata iletisiyle ilgili bazı soruları/yanıtları okudum, ancak uygun çözümü tam olarak anlamadım.İki nesne arasındaki ilişki, farklı ObjectContext nesnelerine eklendikleri için tanımlanamaz.
EF4 içeriğini oluşturmanız, kullanmanız ve sonra imha etmeniz gerektiğini defalarca okudum. Uygulamam boyunca, burada ve orada farklı bağlam nesneleri kullanarak varlıkları yüklüyorum ve daha sonra varlıkları birlikte ilişkilendirmek istiyorum.
Hataya neden olan basit bir konsol uygulaması oluşturdum. Çok basit model şema ile takip edilir.
Aynı bağlamı paylaşmak için iki farklı varlıkları nasıl alabilirim? Gerçekten yeni bir içerik oluşturmalı mıyım, iki varlığı tekrar yüklemeliyim (zaten sahip olmalarına rağmen), sadece onları ilişkilendirmek ve kaydetmek?
Zaten mevcut, uygun bir soru/cevap özledim, lütfen beni doğru yere yönlendirin.
internal class Program {
private static void Main(string[] args) {
DeleteAllEntities();
CreateInitialEntities();
Owner o = LoadOwner();
Child c = LoadChild();
AssociateAndSave(o, c);
}
private static void AssociateAndSave(Owner o, Child c) {
using (var context = new ModelEntities()) {
// Exception occurs on the following line.
o.Children.Add(c);
context.Attach(o);
context.SaveChanges();
}
}
private static Owner LoadOwner() {
using (var context = new ModelEntities()) {
return ((from o in context.Owners
select o).First());
}
}
private static Child LoadChild() {
using (var context = new ModelEntities()) {
return ((from c in context.Children
select c).First());
}
}
private static void CreateInitialEntities() {
using (var context = new ModelEntities()) {
Owner owner = new Owner();
Child child = new Child();
context.Owners.AddObject(owner);
context.Children.AddObject(child);
context.SaveChanges();
}
}
private static void DeleteAllEntities() {
using (var context = new ModelEntities()) {
List<Child> children = (from c in context.Children
select c).ToList();
foreach (var c in children)
context.Children.DeleteObject(c);
List<Owner> owners = (from o in context.Owners
select o).ToList();
foreach (var o in owners)
context.Owners.DeleteObject(o);
context.SaveChanges();
}
}
}
Hmm .. Sadece 'context.Attach (o); context.Attach (c); 'hatayı önler. Ancak bunu gerçek uygulamamda denediğimde, 'ObjectStateManager'da aynı anahtarın bulunduğu bir nesne var. Nesneler bu örneğe benzer bir şekilde yüklenmiş olsa bile, ObjectStateManager aynı nesneye sahip birden fazla nesneyi izleyemez. ” – Steve