Есть ли что-то аналогичное в NHibernate в отношении свойства навигации Entity Framework?Например, вместо:
s.Save(new Product { Category = s.Get<Category>("FD"), Name = "Pizza" });
Я хотел бы написать:
s.Save(new Product { CategoryId = "FD", Name = "Pizza" });
Могу ли я сообщить NHibernate, чтобы он не использовал свойство категории продукта в качестве механизма для сохранения категории продукта?Я хочу использовать CategoryId вместо этого (читай: я не хочу использовать DTO).Похоже, что Entity Framework способна полностью избежать шаблонов DTO, в то же время предлагая все преимущества ORM (можно избежать объединений с использованием свойств навигации).Я хочу, чтобы EF предлагал лучшее из обоих миров (экономный механизм для сохранения объектов, т.е. не нужно извлекать объект свойства) и механизм навигации для запросов материала
Пример из EF: http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-code-first-walkthrough.aspx
public class Category
{
public virtual string CategoryId { get; set; }
public virtual string Name { get; set; }
public virtual IList<Product> Products { get; set; }
}
public class Product
{
public virtual int ProductId { get; set; }
public virtual string Name { get; set; }
public virtual string CategoryId { get; set; }
public virtual Category Category { get; set; }
}
[ОБНОВЛЕНИЕ]
Что касается ответа Джеймса, я пытался увидеть действия NHibernate в SQL Server Profiler.
// this act didn't hit the Category table from the database
var c = s.Load<Category>("FD");
// neither this hit the Category table from the database
var px = new Product { Category = c, Name = "Pizza" };
// this too, neither hit the Category table from the database
s.Save(px);
Только при фактическом доступе к категорииобъект, который NHibernate попадет в базу данных
Console.WriteLine("{0} {1}", c.CategoryId, c.Name);