2012-03-15 2 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

вы должны понимать механизм контекста Entity Framework. В разных контекстах используется другое хранилище.

Когда вы получаете данные из второго контекста, он получает данные непосредственно из базы данных, поэтому данные из первого не могут переходить ко второму.

Есть некоторые работы вокруг решения для вашего требования зависит от структуры кода:

  1. если 2 контексты могут быть доступны в одной и той же функции, только отделить объект от 1-го контекста и присоединить его к 2

  2. если 2 контекста доступны в двух разных функциях/вызовах, поэтому вы можете использовать один контекст для всего приложения. Его можно реализовать с помощью IOC (инверсия управления). Некоторые распространенные методы - это IOC, Autofac, Microsoft Unity ...

+0

Если я использую один контекст, то есть в одиночном режиме, означает ли это, что все вызовы чтения и записи из контекста должны быть завернуты в блокировку для обеспечения безопасности потока? – DaveO

Смежные вопросы