2010-08-06 20 views
5
I/EF 4 CTP w müstakil bir POCO güncellemeye çalışıyorum

4. Alanım sınıfı şöyleGüncelleme EF 4 Özellik CTP 4 Müstakil POCO

: Ben depo olarak

public class User { 
    public int Id { get; set; } 

    [Required, DisplayName("First Name")] 
    public string FirstName { get; set; } 

    [Required, DisplayName("Last Name")] 
    public string LastName { get; set; } 

    [ConcurrencyCheckAttribute, Timestamp] 
    public byte[] DataVersion { get; set; } 
} 

aşağıdaki:

public void SaveUser(User user) { 
    if (user.Id > 0) { 
    dbContext.Users.Attach(user); 
    } 
    else { 
    dbContext.Users.Add(user); 
    } 
    dbContext.SaveChanges(); 
} 

DBContext DBContext devralır.

Eklemeleri iyi yapabilirim, ancak ek çalışmıyor. Sql Profiler'i çalıştırıyorum ve güncelleme için sql gönderilmiyor. DBContext sınıfta

Ben çözdüm

cevap

6

.... ben değiştirildiği şekilde varlık işaretleyen bir yöntem ekledi.

public void MarkAsModified(object entity) { 
    base.ObjectContext.ObjectStateManager.ChangeObjectState(entity, EntityState.Modified); 
} 

Benim depo yöntem şimdi bu temelde aynı şeyi yapıyor biliyorum ama ne yaptığım bir yöntem GetForUpdate veya buna benzer çağrıda Kullanıcı depodaki bu

public void SaveUser(User user) { 
    if (user.Id > 0) { 
    dbContext.Users.Attach(user); 
    dbContext.MarkAsModified(user); 
    } 
    else { 
    dbContext.Users.Add(user); 
    } 

    dbContext.SaveChanges(); 
} 
+0

Merhaba. Sadece "linq'de ayrılmış nesneyi güncelleme" için uzun zamandır arama yaptım ve her iki satır da şimdi çalışıyor 'db.UserProfileSet.Attach (Kullanıcı) 'db.ObjectStateManager.ChangeObjectState (Kullanıcı, EntityState.Modified) ' – Nasenbaer

2

benziyor :

012: Sonra

public User GetForUpdate(int id) 
{ 
    var u = new User(); 
    u.Id = id; 
    dbContext.Users.Attach(u); 
    return u; 
} 

siz "güncelleme" bilinen bir kimliğe sahip bir kullanıcı istediğinizde

Kullanıcı ve öğesinin bağlanması, özelliklerini değiştirerek EntityState değerini otomatik olarak Modified olarak ayarlar.

HTH

+0

Gotcha , Bahşiş için teşekkürler. Bununla ilgili tek sorun, MVC kullanıyorum ve model bağlamadan yararlanmak istiyorum. Örneğinizde, repo.GetForUpdate'i sonra UpdateModel'i ve ardından Kaydet'i çağırmalıyım. Ama alternatiflerin olduğunu bilmek güzel. – xxx

+0

Üzgünüz, sorularınızı cevaplayamıyorum (yeterli cevap yok) – xxx

+0

@xxx - Endişelenmeyin. – TheCloudlessSky