我有這樣的映射:僅獲得一個我多對一對象的ID
[Class(Table = "foo", Name = "Foo")]
public class Foo
{
[Id(0, TypeType = typeof(long), Name = "Id", Column = "id")]
[Generator(1, Class = "native")]
public virtual long Id { get; set; }
[ManyToOne(Class = "Bar", Column = "bar_id", NotNull = true)]
public virtual Bar Bar { get; set; }
}
[Class(Table = "bar", Name = "Bar")]
public class Bar
{
[Id(0, TypeType = typeof(long), Name = "Id", Column = "id")]
[Generator(1, Class = "native")]
public virtual long Id { get; set; }
[Bag(0, Inverse = true, Table = "foo", Cascade = "save-update")]
[Key(1, Column = "bar_id", ForeignKey = "fk_foo_bar_id")]
[OneToMany(2, Class = "Foo")]
public virtual IList<Foo> Foos { get; set; }
}
,我想這樣做的SQL查詢:
SELECT bar_id FROM foo f WHERE f.id = 1
我知道我可以做
Session.Get<Foo>(1).Bar.Id
然而,它加載了Bar
對象,並且如果它是一個非常有用的對象,我的簡單查詢只需要在之內的東西表很慢。我應該怎麼做?
我想增加一個屬性這樣
[Property(Column = "bar_id", NotNull = true)]
public virtual long BarId { get; set; }
但我不知道這是否是錯誤的或者不,還是我應該是不同的。
是的我知道延遲加載,但我無法改變我的第二個酒吧對象。實際上,我只是不明白我的NHibernate迫使我加載對象Bar,對於我的第一個對象Foo裏面的東西... –
它不是懶加載,它是懶惰的屬性...如果你有龐大的字段(而不是映射),你可以標記爲懶惰。去檢查ayende的文章。 – Illuminati
對不起,我知道這篇文章,並在代碼中使用它。我的問題是,我無法更改屬性,使屬性爲惰性,因爲它可能會破壞其他代碼。 –