简体   繁体   English

使用nhibernate获取通用数据

[英]Get generic data with nhibernate

I wanna create universal/generic method for getting data from various entities. 我想创建通用/通用方法来从各种实体获取数据。 This is my code... 这是我的代码...

public T GetOldData<T>(ISession session, object id) where T : class
{
     var data = session.Get<T>(id);

     return data;
}

...but I allways got this error: ...但是我总是遇到这个错误:

Ambiguous persister for System.Object implemented by more than one hierarchy. 由多个层次结构实现的System.Object的歧义持久性。

I call it with: var data = GetOldData<object>(session, @event.Entity); 我这样称呼它: var data = GetOldData<object>(session, @event.Entity);

When you pass the object to your Get<> generic method, NHibernate does not know what mapped entity you need. 当您将object传递给Get<>通用方法时,NHibernate不知道您需要哪个映射的实体。 What you have to do is to provide what entity you need, for sample: 您要做的是提供所需的实体,例如:

var data = GetOldData<Customer>(session, customerId);

You also could implement a method to provide a type instead of a generic. 您还可以实现提供类型而不是泛型的方法。 For sample: 样品:

var entityType = typeof(Customer); // or something dynamic

var data = (Customer) GetOldData(session, entityType, id);

And implement the method: 并实现方法:

public object GetOldData(ISession session, Type entityType, object id) 
{
     var data = session.Get(entityType, id);

     return data;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM