簡體   English   中英

NHibernate的通用實體

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM