2013-09-30 54 views
0

我首先使用VS 2010與實體框架5代碼和C#並且有一個Web應用程序(因此爲斷開連接的實體)。我習慣於直接使用SQL查詢,但對於EF和代碼來說,這是非常新的。在EF5中添加/更新實體所需的模式(包括關係)

我有兩個類:

public class User 
{ 
    public int UserID {get; set;} 
    public string UserName { get; set; } 
    public bool IsSuspended { get; set; } 
    public int UnitID { get; set; } 
    public virtual MyTrust MyTrusts { get; set; }   
} 

public class MyTrust 
{ 
    public int MyTrustID { get; set; } 
    public string MyTrustName { get; set; } 
    public string Region { get; set; } 
    public bool DoNotUse { get; set; }   
} 

和我的DbContext類包含:

public DbSet<MyTrust> MyTrust { get; set; } 
public DbSet<User> Users { get; set; } 

modelBuilder.Entity<User>() 
    .HasRequired(m => m.MyTrust); 

的MyTrust實體將不會改變 有三種情況我感興趣的是:

  • 添加具有現有MyTrust的用戶
  • 更新,而無需更改信任
  • 更新與改變用戶的信賴

當網站返回MyTrust對象只有在MyTrustID集數據的用戶。當我更新/添加用戶時,MyTrust記錄也會更新。

CLARIFICATION User對象中的關係沒有更新;實際的MyTrust對象用從網站返回的數據進行更新;因爲大多數字段都是空的,這會破壞對象並且不能實現所需的用戶記錄更新。

事實上,問題似乎歸結爲關係的錯誤結局正在更新的事實。

我看了一些很多的例子,我看不到一個簡單的解決方案。

任何人都可以請建議一個簡單的模式(這是SQL天很容易)。

UPDATE 我通過向User和MyTrust類添加特定的鍵來解決這個問題。

public int NHSTrustID { get; set; } 

和MyTrust類中的匹配鍵。

回想起來,這個問題是錯誤的。我沒有遵循模式,而是針對特定問題的解決方案。

回答

0

我已經給下面的一些例子 - 我從內存中完成他們,但希望會給你一個很好的起點:

添加一個用戶與現有MyTrust

using(var context = new MyDbContext()){ 
    context.Entry(myUser).State = EntityState.Added 

    context.Entry(myUser.MyTrusts).State = EntityState.Modified; 
    context.Entry(myUser.MyTrusts).Property(x => x.MyTrustName).IsModified = false; 
    context.Entry(myUser.MyTrusts).Property(x => x.Region).IsModified = false; 
    context.Entry(myUser.MyTrusts).Property(x => x.DoNotUse).IsModified = false; 

    context.SaveChanges(); 
} 

更新用戶沒有變化到信託:

using(var context = new MyDbContext()){ 
    context.Entry(myUser).State = EntityState.Modified 
    context.Entry(myUser.MyTrusts).State = EntityState.Unchanged; 

    context.SaveChanges(); 
} 

更新用戶與變化到信託:

using(var context = new MyDbContext()){ 
    context.Entry(myUser).State = EntityState.Modified 
    context.Entry(myUser.MyTrusts).State = EntityState.Modified; 

    context.SaveChanges(); 
} 
+0

嗨馬特,感謝您的快速響應。不幸的是,這並不能真正解決問題,因爲我想從更新中排除MyTrust對象。我只想更新用戶對象中的關係。請參閱上面的說明。 –

+0

嗨,彼得 - 是用戶對MyTrust關係「一對一」還是「一對多」? –

+0

嗨馬特 - 最終澄清。每個用戶必須有一個信任;任何信任都可能有用戶。 –