2009-06-12 9 views
1

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

public class Order 
{ 
    public int OrderId{get;set;} 
    public EntityCollection<LineItem> Items{get;} 
} 

public class LineItem 
{ 
    public Order Order{ get;set;} 
} 

Мы можем загружать заказ из базы данных, как это:

var order = Order.FindById(1000); 

Теперь вот ключ к моему вопросу следующее верно для нашей нынешней системы

object.ReferenceEquals(order, order.Items[ 0 ].Order); 

То есть свойство Order в позиции указывает на тот же экземпляр объекта заказа в памяти при доступе через свойство Items.

Я немного устал от поддержки наших инструментов сущности и хочу переключиться на NHibernate или другую инфраструктуру сохранения. Тогда мой вопрос: работают ли ленивые функции загрузки NHibernate или загружают новый экземпляр объекта Order для каждой позиции?

ответ

2

NHibernate работает таким образом в течение одного сеанса (Unit of Work). Есть способы заставить его работать таким образом за пределами одного сеанса, используя кеш второго уровня NHibernate. Подробное объяснение этого можно найти здесь First And Second Level Caching In NHibernate

1

Да. Они ссылаются на один и тот же экземпляр! То же самое для LINQ to SQL и Entity Framework.

0

Да, NHibernate использует Identity Map в ISession для управления ссылками на сущности. Другие рамки постоянства делают (или должны делать) то же самое.

2
object.ReferenceEquals(order,order.Items[ 0 ].Order); 

не всегда может быть правдой, это зависит от того, как вы создали много к одной стороне в nihibernate отображения, если вы установите его ленивым (как показано ниже)

<many-to-one name="order" lazy="proxy" /> 

затем ссылка равно wont return true.

Но если вы получите intial порядок в же сессии в предыдущей строке, как вы упомянули, то вы может получить реальный объект не прокси

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

  • Нет связанных вопросов^_^