[英]Generic Entity for NHibernate
我正在嘗試使用NHibernate編寫一種通用數據倉庫,但是遇到了兩個問題。
我有一個這樣定義的類:
public class Entity
{
public Entity() { }
public Entity (string schemaName)
{
this.SchemaName = schemaName;
}
[DataMember]
public string SchemaName { get; set; }
[DataMember]
public Guid Id {
get { return this.Attributes.ContainsKey("id") ? (Guid)this.Attributes["id"] : Guid.Empty; }
set { this.Attributes ["id"] = value; }
}
[DataMember]
public Dictionary<string, object> Attributes = new Dictionary<string, object>();
}
我想做的是在SQL中使用Attribute字典作為表的列,將SchemaName作為表名。 我有幾個包裝器函數可以插入/檢索/刪除,但它只能執行〜170 /秒。 我想通過使用本機NHibernate方法來改善這一點。 從技術上講,我可以根據列信息在內存中生成一個類,並將其提供給NHibernate,但我認為這不是最好的選擇。
我將如何完成? 有沒有更簡單的方法可以做到這一點?
目前,我有一些可以根據傳入的信息生成查詢,然后通過在NHibernate會話對象上使用CreateSqlQuery來執行查詢。
因此,此問題的答案直接來自NHibernates文檔,我在本文中找到了該文檔: 如何在nhibernate中保存動態對象
該解決方案來自動態模型,您需要在其中配置會話以進行處理。
實體表示模式也可以在每個ISession的基礎上設置:
using (ISession dynamicSession = pocoSession.GetSession(EntityMode.Map))
{
// Create a customer
var frank = new Dictionary<string, object>();
frank["name"] = "Frank";
dynamicSession.Save("Customer", frank);
...
}
// Continue on pocoSession
另一種選擇是設置會話工廠來為您執行此操作。 但是,文檔尚不清楚...或者我懶得找到它...如何實現這一目標。
感謝@RadimKöhler發布了有關此文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.