Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么NHibernate代码映射忽略我的Oracle大小写表名:_Oracle_Nhibernate_Mapping By Code - Fatal编程技术网

为什么NHibernate代码映射忽略我的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

我正在使用NHibernate 3.3.2.4000的Oracle数据库

我设置了一个单元测试来验证是否可以从表中选择实体集合。下面是它的样子:

[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"));
    }
}