具有两种不同数据库引擎(Oracle 和 SQL Server)的 Fluent Id 字段

发布于 2024-11-16 02:21:08 字数 1434 浏览 1 评论 0原文

我正在使用 Fluent NHibernate 来映射我的实体。

在我的应用程序中,我必须使用 2 个不同的引擎(Oracle 和 SQL Server)。我使用命令行参数中的参数设置引擎并将其发送到我的 SessionFactory 类:

public static ISessionFactory CreateSessionFactory(string databaseEngine, string connectionString, Type entityType)
{
   switch (databaseEngine.ToLower())
   {
      case "mssql":
         return Fluently.Configure()
                      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString))
                      .Mappings(m => m.FluentMappings.AddFromAssembly(entityType.Assembly))
                      .BuildSessionFactory();
      case "oracle":
         return Fluently.Configure()
                      .Database(OracleClientConfiguration.Oracle9.ConnectionString(connectionString))
                      .Mappings(m => m.FluentMappings.AddFromAssembly(entityType.Assembly))
                      .BuildSessionFactory();
   }

   return null;
}

这是我的 MapClass 之一:

public class SimulacaoMap : ClassMap<Simulacao>
{
    public SimulacaoMap()
    {
        Table("SIMULACAO").GeneratedBy.Sequence("SEQUENCE_NAME"); 
        Id(x => x.Id).Column("ID_SIMULACAO");
        Map(x => x.DataReferencia).Column("DAT_REFERENCIA");
    }
}

这适用于 Oracle,但是,当我使用 SQL Server 时,我收到此异常:

无法实例化 ID 生成器: 序列。

如何使用同时适用于 SQL Server 和 Oracle 的 Id Map?

谢谢

I'm using Fluent NHibernate to map my entities.

In my application I have to work with 2 different engines (Oracle and SQL Server). I set the engine with the parameter in the command line argument and send it to my SessionFactory class:

public static ISessionFactory CreateSessionFactory(string databaseEngine, string connectionString, Type entityType)
{
   switch (databaseEngine.ToLower())
   {
      case "mssql":
         return Fluently.Configure()
                      .Database(MsSqlConfiguration.MsSql2008.ConnectionString(connectionString))
                      .Mappings(m => m.FluentMappings.AddFromAssembly(entityType.Assembly))
                      .BuildSessionFactory();
      case "oracle":
         return Fluently.Configure()
                      .Database(OracleClientConfiguration.Oracle9.ConnectionString(connectionString))
                      .Mappings(m => m.FluentMappings.AddFromAssembly(entityType.Assembly))
                      .BuildSessionFactory();
   }

   return null;
}

This is one of my MapClass:

public class SimulacaoMap : ClassMap<Simulacao>
{
    public SimulacaoMap()
    {
        Table("SIMULACAO").GeneratedBy.Sequence("SEQUENCE_NAME"); 
        Id(x => x.Id).Column("ID_SIMULACAO");
        Map(x => x.DataReferencia).Column("DAT_REFERENCIA");
    }
}

This works for Oracle, but, when I use SQL Server I get this exception:

could not instantiate id generator:
sequence.

How can I use a Id Map that works for SQL Server and Oracle at the same time?

Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

少女情怀诗 2024-11-23 02:21:08

SQL Server vNext 支持“SEQUENCE ”,或更改“GenerateBy”部分。

SQL Server vNext supports "SEQUENCE", or change that "GeneratedBy" part.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文