Можно ли заставить Entity Framework распознавать объекты, которые были созданы и еще не сохранены в базе данных? - PullRequest
4 голосов
/ 19 июня 2011

Скажем, Table1 - это таблица с двумя столбцами. Table1ID и имя.

Если я сделаю следующий код ...

var Obj1 = new Table1();
Obj1.Name = "hello"
TestDBEntities.AddToTable1(Obj1);

var currObj = Table1.Where(o => o.Name.Contains("hello")).FirstOrDefault();

currObj вернет ноль.

Но если я сделаю это

var Obj1 = new Table1();
Obj1.Name = "hello"
TestDBEntities.AddToTable1(Obj1);
**TestDBEntitles.SaveChanges();**

var currObj = Table1.Where(o => o.Name.Contains("hello")).FirstOrDefault();

Тогда currObj вернет первый объект, который я создал. Это потому, что этот объект находится в базе данных.

Я создаю большой пакетный процесс и не хочу сохранять все в базе данных до конца. Однако я должен выполнить проверки, например, убедиться, что определенный объект еще не добавлен и т. Д., Которые требуют от меня ссылки на эти объекты до того, как они будут сохранены в базе данных.

Можно ли выполнять запросы LINQ в Entity Framework, которые могут знать объекты в памяти, которые не были сохранены в базе данных.

Ответы [ 3 ]

6 голосов
/ 19 июня 2011

Я немного опоздал ... Ответ @DavidWicks не рассказывает всей истории!

Контекст обеспечивает механизм запроса - и в EF4.1 он стал намного легче, чем4.0

В 4.1 взгляните на http://msdn.microsoft.com/en-us/library/gg696248(v=vs.103).aspx свойство dbSet.Local хранит все локальные изменения для объектов (которые не были удалены) в контексте, так что запросить это все, что вам нужнонеобходимо!

3 голосов
/ 19 июня 2011

Добавьте созданные и несохраненные объекты в List<T>, затем отфильтруйте этот список с помощью linq, как вы делали выше.

РЕДАКТИРОВАТЬ: на самом деле, я исправлен.Похоже, вы можете указать параметры слияния в ObjectContext.

TestDBEntities.ObjectStateManager.GetObjectStateEntries(EntityState.Added)
    .Where(o => o.GetType() == typeof(Object1Type) 
           && o => o.Name.Contains("hello"))
    .FirstOrDefault();

в документах .

0 голосов
/ 01 июля 2016

Это только то, что вам нужно сделать:

    Datacontext.YourTable.Add(entity);
    var x=Datacontext.YourTable.Local;

С помощью .Local получить локальное состояние сущности dbset:)

...