NHibernate中有關於實體框架的導航屬性有類似的東西嗎?例如,而不是:NHibernate中有關於實體框架的導航屬性的東西類似嗎?
s.Save(new Product { Category = s.Get<Category>("FD"), Name = "Pizza" });
我希望我能寫:
s.Save(new Product { CategoryId = "FD", Name = "Pizza" });
我可以告訴NHibernate的不使用產品的類別屬性作爲一種機制來保存產品的類別?我想改爲使用CategoryId(閱讀:我不想使用DTO)。實體框架似乎能夠完全避免DTO模式,同時提供ORM的全部好處(可以避免使用導航屬性進行連接)。我希望英孚提供了兩全其美的(精益機制保存對象,即無需檢索屬性的對象)和導航機制,從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; }
}
[ UPDATE]
關於James答案,我試着在SQL Server Profiler中看到NHibernate的操作。
// 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);
對,使用s.Load(「FD」)和s.Save,Sql Server Profiler不會顯示任何對數據庫類別的命中。我愛NHibernate甚至更多^ _ ^感謝您爲我闡述它 –
Hao
2011-04-10 01:17:29