2009-08-06 5 views
2

Я новичок в платформе Entity Framework и в настоящее время экспериментирую с ней. Я создал простую базу данных, настроил модель в VS2008 и получил код для запроса базы данных с использованием EF, а также для вставки новых данных.Entity Framework и временные объекты

Есть одна вещь, которая меня немного запутала. У меня есть сущность (настроенная в моей модели), называемая Клиент, и как часть логики моего приложения я хочу иметь возможность создать временный объект Customer для некоторой промежуточной обработки. Этот конкретный объект никогда не должен храниться в базе данных. Однако я заметил, что как только я вызову SaveChanges(), клиент будет сохранен в базе данных. Это не то, что я хочу. Я был бы очень рад называть AddCustomer() на объектах I do хочу включить - я просто хочу иметь возможность создать временный экземпляр для моего собственного использования.

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

Возможно, я что-то не понимаю о том, как должен работать EF, или что у меня что-то не хватает - я надеюсь, что кто-то может меня прямо посадить!

Благодаря

Джон

+0

* шишка * У меня это точно тот же вопрос –

ответ

0

Если вы хотите иметь временный экземпляр объекта, который никогда не будет подключен к EF снова, используйте этот Entity Cloner для клонирования объект

Если вы пытаясь отключить сущность, отправить ее по кабелю где-нибудь (скажем, передать его клиенту через службу, изменить его, а затем снова вернуть) и снова слить обратно изменения в EF - право теперь это напрямую не поддерживается. Как всегда, вы можете попробовать эти решения

Entity Bag:

EFContrib (you need PostSharp4EF)

+0

спасибо очень много для что. Я на самом деле создаю совершенно новые объекты, а не клонирую их - в идеале, что бы я хотел сделать это Клиент cust = new Customer(); без этого в EF, если я конкретно не скажу entity.AddToCustomer (cust); Я не уверен, что эти ссылки позволят мне сделать что-то подобное? – John

0

Почему нет другого класса клиентов с теми же полями?

+0

Это возможность, но в случаях, когда мне нужно сохранить один из временных объектов, мне нужно будет преобразовать его в объект EF. Кроме того, это становится довольно диким, если у меня есть дочерние объекты у Клиента (например, Заказ), с которым я манипулирую - теперь у меня были бы версии памяти Customer, Order, Address и т. Д. В памяти, а также версии EF. Это определенно способ решения проблемы - но это похоже на большую работу и много ненужной работы, учитывая, что EF уже составлял эти классы для меня! Спасибо за предложение. – John

0

Просто столкнулся с этой проблемой сам с сервисом с помощью EF4 - есть более простое решение - после создания нового экземпляра сущности вызовите

objectContext.Detach(newEntity); 
Смежные вопросы