标签: fluent-nhibernate-mapping

FluentNHibernate和NHibernate的"按代码映射"之间的区别

我来自ORM工具的实体框架和LLBL背景.

我被要求建立一个基于NHibernate的新系统.我从来没有这样做过,所以我带着新鲜的眼睛来看它.

使用Fluent NHibernate进行映射和NHibernate中的"按代码映射"有什么区别?有偏好吗?

nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

30
推荐指数
2
解决办法
1万
查看次数

Fluent NHibernate在没有hbm.xml映射的情况下查询存储过程

有没有办法在不创建hbm.xml文件映射的情况下在Fluent Nhibernate中查询存储过程?

stored-procedures fluent-nhibernate-mapping

19
推荐指数
2
解决办法
1万
查看次数

流利的Nhiberhate和缺少毫秒

我正在使用Fluent Nhibernate和Nhibernate来完成我当前的项目.我需要将时间记录到毫秒.我有这个用于我的映射

            Map(x => x.SystemDateTime)
            .CustomType("Timestamp")
            .Not.Nullable();
Run Code Online (Sandbox Code Playgroud)

我创建了hbm.xml文件,该行如下:

<property name="SystemDateTime" type="Timestamp">
  <column name="SystemDateTime" not-null="true" />
</property>
Run Code Online (Sandbox Code Playgroud)

我已经读过这是修复,但数据库中的记录没有毫秒.有谁解决了这个问题.我也尝试过CustomSqlType.

谢谢

nhibernate fluent-nhibernate fluent-nhibernate-mapping

14
推荐指数
1
解决办法
3649
查看次数

流利的Nhibernate多对多映射方式

我有两个类Order和Items

我想要一个像这样的方法

class Order
{
    public virtual IList<Item> GetItems(Order order)
    {
         //get items for that order.
    }
}
class Item
{
    public virtual IList<Order> GetOrders(Item item)
    {
         //get all the orders in which that items is present.
    }
}
Run Code Online (Sandbox Code Playgroud)

是编写创建这样的方法还是我应该创建一个属性

     public virtual IList<Item> Items { get; set; }
Run Code Online (Sandbox Code Playgroud)

我应该怎么做这个映射是nhibernate?

fluent-nhibernate fluent-nhibernate-mapping

14
推荐指数
1
解决办法
2万
查看次数

流畅的NHibernate生成额外的列

在我工作的公司中,我们使用Fluent NHibernate作为数据对象模型.几天前,我们遇到了一个问题,Fluent NHibernate生成了一个额外的列,它既不存在于模型中,也不存在于映射中.情况如下:

我的模型:FirstClass.cs

public class FirstClass
{
    public virtual int Id { get; private set; }
    public virtual SecondClass MyReference { get; set; }
    public virtual DateTime DecisionDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的映射:

public class FirstClassMap : ClassMap<FirstClass>
{
    public FirstClassMap()
    {
        Id(x => x.Id);
        Map(x => x.DecisionDate);

        References(x => x.MyReference);
    }
}
Run Code Online (Sandbox Code Playgroud)

使用以下代码构建架构后,

Instance._sessionFactory = Fluently.Configure()
                .Database(MySQLConfiguration.Standard
                    .ConnectionString(connectionString)
                    .ShowSql())
                .ExposeConfiguration(c =>
                {
                    c.Properties.Add("current_session_context_class", ConfigurationHelper.getSetting("SessionContext"));
                })
                .ExposeConfiguration(BuildSchema)
                .Mappings( m => m.FluentMappings.AddFromAssemblyOf<Community>())
                .BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)

使用具有Id列的SecondClass表的索引和外键生成名为"SecondClass_id"的额外列.这是生产的表格:

CREATE TABLE `FirstClass` (
  `Id` …
Run Code Online (Sandbox Code Playgroud)

nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

11
推荐指数
1
解决办法
2017
查看次数

流畅的nHibernate:不支持的映射类型

我正在设置一个新的解决方案来映射已从Access数据库导入的SQL数据.Auto Mappings对我定义的实体工作正常,但我需要能够使用Fluent映射类型来访问.NotFound.Ignore扩展.

我在另一个项目中使用了完全相同的语法(我认为!),它工作得很好.我是否犯了一个小学生错误导致"不支持的映射类型'IT.Classes.Entities.Admin'"?任何帮助深表感谢.

DDL:

CREATE TABLE [dbo].[Admin](
    [ID] [int] NOT NULL,
    [primaryEmail] [nvarchar](50) NULL,
    [secondaryEmail] [nvarchar](50) NULL,
    [highPriorityEmail] [nvarchar](50) NULL,
    [MobileEmail] [nvarchar](50) NULL,
    [EmailUser] [bit] NOT NULL,
    [HelpDeskMessage] [nvarchar](max) NULL
) ON [PRIMARY]
Run Code Online (Sandbox Code Playgroud)

实体:

namespace IT.Classes.Entities
{
    public class Admin
    {
    public virtual bool EmailUser { get; set; }

    public virtual string HelpdeskMessage { get; set; }

    public virtual string HighPriorityEmail { get; set; }

    public virtual int Id { get; set; }

    public virtual string MobileEmail { get; set; …
Run Code Online (Sandbox Code Playgroud)

nhibernate fluent-nhibernate fluent-nhibernate-mapping

11
推荐指数
1
解决办法
3096
查看次数

Sql视图的流畅Nhibernate映射

我在asp.net mvc3中使用Fluent Nhibernate与c#

我正在按照以下方式生成并映射一个类

制图

using FluentNHibernate.Mapping;
using Com.Web.Domain;

   namespace Com.Web.Mapping
      {
         public class CompanyMap : ClassMap<Company>
        {
             public CompanyMap()
            {
               Id(x => x.id);
               Map(x => x.Name);
              }
          }
       }
Run Code Online (Sandbox Code Playgroud)

     using System.Collections.Generic;
     using System;

      namespace Com.Web.Domain
      {

          public class Company
         {

          public virtual int id { get; set; }
          public virtual string Name{get;set}

           }

        }
Run Code Online (Sandbox Code Playgroud)

并在配置文件中

  private static void InitializeSessionFactory()
    {

       _sessionFactory = Fluently.Configure()
            .Database(MsSqlConfiguration.MsSql2008
                          .ConnectionString(local)

            )
            .Mappings(m =>
                      m.FluentMappings
                          .AddFromAssemblyOf<Company>())
            .ExposeConfiguration(cfg => new SchemaExport(cfg)
            .Create(false, false))  // this …
Run Code Online (Sandbox Code Playgroud)

nhibernate asp.net-mvc nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

10
推荐指数
1
解决办法
1万
查看次数

NHibernate中无法识别的配置部分applicationSettings

我正在使用流利的NHibernate.

我有一个app.config文件,其中包含很少的特定键(applicationSettings和userSettings).

似乎nhibernate不喜欢这些键.只要这些密钥存在于文件中,Fluently.Configure()就会失败,并抛出一条带有消息Unrecognized configuration section applicationSettings的异常.

我能做什么?

这是配置文件:

<?xml version="1.0"?>
<configuration>
  <connectionStrings>
    <add name="MyDB" connectionString="Data Source=|DataDirectory|\MyDB.sdf" providerName="Microsoft.SqlServerCe.Client.3.5" />
</connectionStrings>
  <startup>
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
  </startup>
  <applicationSettings>
        <MyApp.Properties.Settings>
            <setting name="ServerIp" serializeAs="String">
                <value>127.0.0.1</value>
            </setting>
            <setting name="ServerPort" serializeAs="String">
                <value>5678</value>
            </setting>
            <setting name="UseSSL" serializeAs="String">
                <value>True</value>
            </setting>
            <setting name="WsUrl" serializeAs="String">
                <value/>
            </setting>
        </MyApp.Properties.Settings>
    </applicationSettings>
    <userSettings>
        <MyApp.Properties.Settings>
            <setting name="User" serializeAs="String">
                <value>test</value>
            </setting>
            <setting name="Password" serializeAs="String">
                <value>test</value>
            </setting>
        </MyApp.Properties.Settings>
    </userSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

谢谢!

.net c# nhibernate fluent-nhibernate fluent-nhibernate-mapping

9
推荐指数
1
解决办法
2万
查看次数

将同一实体映射到不同的表

一点领域知识

我正在编写一个 POS(销售点)软件,它允许支付货物或退款。在付款或退款时,需要指定使用哪种汇款方式:现金、EFT(~=信用卡)、会员卡、代金券等。

这些汇款方式是一组有限且已知的值(一种枚举)。

棘手的部分是我需要能够在 POS 终端上存储这些方式的自定义子集,用于付款和退款(两组可能不同)。

例如:

  • 可用的付款方式:现金、电子转帐、会员卡、代金券
  • 可用退款方式:现金、代金券

实施现状

我选择实现汇款方式的概念如下:

public abstract class MoneyTransferMean : AggregateRoot
{
    public static readonly MoneyTransferMean Cash = new CashMoneyTransferMean();
    public static readonly MoneyTransferMean EFT = new EFTMoneyTransferMean();
    // and so on...

    //abstract method

    public class CashMoneyTransferMean : MoneyTransferMean
    {
        //impl of abstract method
    }

    public class EFTMoneyTransferMean : MoneyTransferMean
    {
        //impl of abstract method
    }

    //and so on...
}
Run Code Online (Sandbox Code Playgroud)

它不是“普通枚举”的原因是这些类内部存在一些行为。我还必须将内部类声明为 public(而不是私有),以便在 FluentNHibernate 映射中引用它们(见下文)。

如何使用

支付和退款手段总是作为一个集合存储在/从数据库中检索。它们实际上是两个不同的集合,即使两个集合中的某些值可能相同。

用例 1:定义一组新的支付/退款方式

  • 删除所有现有的支付/退款方式
  • 插入新的

用例2:检索所有支付/退款方式 …

c# nhibernate domain-driven-design fluent-nhibernate fluent-nhibernate-mapping

9
推荐指数
1
解决办法
310
查看次数

流畅的NHibernate一对多映射

我有以下两个班级:

广告

public virtual int Id { get; set;
public virtual IList<AdvertImage> AdvertImages { get; set; }
Run Code Online (Sandbox Code Playgroud)

AdvertImage

public virtual int Id { get; set; }
public virtual string Filename { get; set;
public virtual Advert Advert { get; set; }
Run Code Online (Sandbox Code Playgroud)

在数据库中,我的AdvertImages表具有FK'AdvertId',它与具有'Id'PK的广告表相关.

这是一对多映射,因为一个广告可以有许多图像.

我的Fluent NHibernate映射(为简洁起见编辑)是:

AdvertMap

Id(x => x.Id)
  .GeneratedBy.Identity();
...
HasMany(x => x.AdvertImages)
  .KeyColumn("AdvertId")
  .Inverse();
...
Table("Adverts");
Run Code Online (Sandbox Code Playgroud)

AdvertImageMap

Id(x => x.Id)
  .GeneratedBy.Identity();
...
References(x => x.Advert)
  .Column("AdvertId");
...
Table("AdvertImages");
Run Code Online (Sandbox Code Playgroud)

我正在创建一个新的Advert代码实例,然后AdvertImages使用a 填充属性(广告)List<AdvertImage>.

当我将我的Advert …

nhibernate nhibernate-mapping fluent-nhibernate fluent-nhibernate-mapping

8
推荐指数
1
解决办法
1万
查看次数