2012-03-15 53 views
0

如果我使用EF創建模型,然後通過創建另一個部分類來擴展它,如何保留EF上下文之間的擴展屬性值?即保留EF上下文之間的部分屬性值

我有一個Stuff實體映射到數據庫表。我通過創建部分類擴展它:

public partial class Stuff 
{ 
    public int SomeInt { get; set; } 
} 

然後將此值設置和召回在不同的上下文:

 Guid id = Guid.NewGuid(); 
     using (var ctx = new EFPrototypeEntities()) 
     { 
      string someData = Guid.NewGuid().ToString("N"); 
      Stuff newStuff = new Stuff 
       { 
        Id = id, 
        SomeDate = DateTime.Now, 
        SomeData = someData, 
        SomeInt = 100 
       }; 
      Console.WriteLine("Added stuff data :" + someData + " with int " + newStuff.SomeInt); 
      ctx.AddToStuffs(newStuff); 
      ctx.SaveChanges(); 
     } 

     using (var ctx = new EFPrototypeEntities()) 
     { 
      Stuff stuff = ctx.Stuffs.First<Stuff>(s => s.Id == id); 
      Console.WriteLine("Got stuff with data : " + stuff.SomeData + " and int " + stuff.SomeInt); 
     } 

SomeInt在第二上下文返回0。如果我只在一個上下文中包裝它,它將返回100。

回答

0

您必須瞭解實體框架上下文機制。不同的上下文使用不同的存儲器

當您從第二個上下文獲取數據時,它直接從數據庫獲取數據,因此第一個數據無法傳入第二個數據。

有一些變通的解決方案爲您的要求取決於你的代碼結構:

  1. 如果2個上下文可以在同一個函數來訪問,只是從第一上下文分離對象,並將其連接到第二

  2. 如果在2個不同的函數/調用中訪問2個上下文,那麼您可以爲整個應用程序使用單個上下文。您可以通過使用IOC(控制反轉)來實現它。一些常見的方法是國際奧委會,Autofac,微軟統一...

+0

如果我在一個單獨使用一個單一的情況下,即,是否意味着所有呼叫讀取,然後從上下文寫需要被包裹在一個鎖確保線程安全? – DaveO 2012-03-22 02:00:46