为什么NHibernate代码映射忽略我的Oracle大小写表名:
我正在使用NHibernate 3.3.2.4000的Oracle数据库 我设置了一个单元测试来验证是否可以从表中选择实体集合。下面是它的样子:为什么NHibernate代码映射忽略我的Oracle大小写表名:,oracle,nhibernate,mapping-by-code,Oracle,Nhibernate,Mapping By Code,我正在使用NHibernate 3.3.2.4000的Oracle数据库 我设置了一个单元测试来验证是否可以从表中选择实体集合。下面是它的样子: [TestFixture] public class UnitOfWorkIntegrationTests { private IUnitOfWork _unitOfWork; private INHibernateSessionFactory _nHibernateSessionFactory; private IActive
[TestFixture]
public class UnitOfWorkIntegrationTests
{
private IUnitOfWork _unitOfWork;
private INHibernateSessionFactory _nHibernateSessionFactory;
private IActiveSessionManager _activeSessionManager;
[SetUp]
public void BeforeEachTest()
{
_nHibernateSessionFactory = new NHibernateSessionFactory();
_activeSessionManager = new ActiveSessionManager();
_unitOfWork = new UnitOfWork(_nHibernateSessionFactory, _activeSessionManager);
}
[Test]
public void ShouldFetchOAuthMemberships()
{
var oauths = _unitOfWork.OAuthMemberships.ToArray();
oauths.ShouldNotBeNull();
}
}
获取我的OAuthMemberships集合的行引发此异常:
无法执行查询
[从bckgrd_小册子_app.oauthmembe0_uu中选择oauthmembe0_u0.id作为id13_uu]
[SQL:从bckgrd_小册子_app.oauthmembe0_uu中选择oauthmembe0_u0.id作为id13_u]
下面是我的OAuthMembership类和映射。正如您所看到的,我将表名定义为“OAUTH_成员资格”,但生成的SQL包含驼峰大小写的类名。我没有定义表名约定。为什么NHibernate忽略我的Oracle大小写表名
public class OAuthMembership
{
public virtual int Id { get; set; }
public virtual string Provider { get; set; }
public virtual string ProviderUserId { get; set; }
public virtual UserProfile UserProfile { get; set; }
}
public class OAuthMembershipMap : ClassMapping<OAuthMembership>
{
public void OAuthMembership()
{
Table("OAUTH_MEMBERSHIP");
Id(x => x.Id, m => m.Column("ID"));
Property(x => x.Provider, m => m.Column("PROVIDER"));
Property(x => x.ProviderUserId, m => m.Column("PROVIDER_USER_ID"));
ManyToOne(x => x.UserProfile, m => m.Column("USER_PROFILE_ID"));
}
}
我的UnitOfWork定义的相关部分:
public interface IUnitOfWork
{
//...
IQueryable<OAuthMembership> OAuthMemberships { get; }
IQueryable<T> All<T>();
//...
}
public class UnitOfWork : IUnitOfWork
{
private readonly ISession _session;
//...
public IQueryable<OAuthMembership> OAuthMemberships
{
get { return All<OAuthMembership>(); }
}
public UnitOfWork(
INHibernateSessionFactory sessionFactory,
IActiveSessionManager activeSessionManager)
{
_session = sessionFactory.Create();
activeSessionManager.SetActiveSession(_session);
}
public IQueryable<T> All<T>()
{
return _session.Query<T>();
}
//...
}
公共接口IUnitOfWork
{
//...
IQueryable OAuthMemberships{get;}
IQueryable All();
//...
}
公共类UnitOfWork:IUnitOfWork
{
专用只读会话;
//...
可供公众查阅的船舶
{
获取{return All();}
}
公共工作单位(
在HibernateSessionFactory sessionFactory中,
IActiveSessionManager(活动会话管理器)
{
_session=sessionFactory.Create();
setActiveSessionManager.SetActiveSession(_session);
}
公共IQueryable All()
{
返回_session.Query();
}
//...
}
在将Fluent NHibernate添加到我的项目中并在那里犯下相同的错误后,我发现了错误
我的OAuthMembershipMap没有构造函数。我错误地添加了一个名为OAuthMembership的void方法,因此表映射以及Id和属性映射失败。请参阅更正的代码:
public class OAuthMembershipMap : ClassMapping<OAuthMembership>
{
public OAuthMembershipMap()
{
Table("OAUTH_MEMBERSHIP");
Id(x => x.Id, m => m.Column("ID"));
Property(x => x.Provider, m => m.Column("PROVIDER"));
Property(x => x.ProviderUserId, m => m.Column("PROVIDER_USER_ID"));
ManyToOne(x => x.UserProfile, m => m.Column("USER_PROFILE_ID"));
}
}
public类OAuthMembershipMap:ClassMapping
{
公共OAuthMembershipMap()
{
表(“OAUTH_成员”);
Id(x=>x.Id,m=>m.Column(“Id”);
属性(x=>x.Provider,m=>m.Column(“Provider”);
属性(x=>x.ProviderUserId,m=>m.Column(“提供者用户ID”);
manytone(x=>x.UserProfile,m=>m.Column(“USER\u PROFILE\u ID”);
}
}
在将Fluent NHibernate添加到我的项目中并在那里犯下相同的错误后,我发现了错误
我的OAuthMembershipMap没有构造函数。我错误地添加了一个名为OAuthMembership的void方法,因此表映射以及Id和属性映射失败。请参阅更正的代码:
public class OAuthMembershipMap : ClassMapping<OAuthMembership>
{
public OAuthMembershipMap()
{
Table("OAUTH_MEMBERSHIP");
Id(x => x.Id, m => m.Column("ID"));
Property(x => x.Provider, m => m.Column("PROVIDER"));
Property(x => x.ProviderUserId, m => m.Column("PROVIDER_USER_ID"));
ManyToOne(x => x.UserProfile, m => m.Column("USER_PROFILE_ID"));
}
}
public类OAuthMembershipMap:ClassMapping
{
公共OAuthMembershipMap()
{
表(“OAUTH_成员”);
Id(x=>x.Id,m=>m.Column(“Id”);
属性(x=>x.Provider,m=>m.Column(“Provider”);
属性(x=>x.ProviderUserId,m=>m.Column(“提供者用户ID”);
manytone(x=>x.UserProfile,m=>m.Column(“USER\u PROFILE\u ID”);
}
}
public class OAuthMembershipMap : ClassMapping<OAuthMembership>
{
public OAuthMembershipMap()
{
Table("OAUTH_MEMBERSHIP");
Id(x => x.Id, m => m.Column("ID"));
Property(x => x.Provider, m => m.Column("PROVIDER"));
Property(x => x.ProviderUserId, m => m.Column("PROVIDER_USER_ID"));
ManyToOne(x => x.UserProfile, m => m.Column("USER_PROFILE_ID"));
}
}