如何使用代码映射在 nhibernate 3.2 中设置表列的默认值?

发布于 2024-12-16 21:51:21 字数 190 浏览 3 评论 0原文

我使用 Fluent NHibernate 作为我的 NHibernate 项目的映射机制。但当谈到 NHibernate 3.2 时,我意识到它内置了代码映射,并且不会为 NHibernate 3.2 发布 Fluent Nhibernate 版本。

当我想为实体属性设置默认值时遇到一个问题,我没有找到执行此操作的 API。有人可以给一些建议吗?

I was using Fluent NHibernate as mapping mechanism for my NHibernate projects. But when it came to NHibernate 3.2, I realized that it has mapping by code built in, and no Fluent Nhibernate releases will be published for NHibernate 3.2.

I encountered a question when I want to set a default value for a entity property, I didn't find the API to do that. Can anybody give some advice?

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

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

发布评论

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

评论(3

浅沫记忆 2024-12-23 21:51:21

我还没有使用代码映射,但是 NHibernate.Mapping.ByCode.Impl.ColumnMapper 类有一个方法 Default(object defaultValue)。 NHibernate JIRA 中的这个问题除了指出一个警告之外,还展示了如何使用它:

mapper.Class<MyDomainObject>(map => map.Property
    (s => s.TermService, 
        pm => pm.Column(cm => cm.Default("'my default value'"))));

这是您要找的吗?

I haven't used mapping by code yet, but the NHibernate.Mapping.ByCode.Impl.ColumnMapper class has a method Default(object defaultValue). This issue in NHibernate's JIRA, apart from pointing out a caveat, shows how to use it:

mapper.Class<MyDomainObject>(map => map.Property
    (s => s.TermService, 
        pm => pm.Column(cm => cm.Default("'my default value'"))));

Is this what you were looking for?

亽野灬性zι浪 2024-12-23 21:51:21

我找到了这段代码。可以帮助你。

        Property(x => x.Property, m =>
        {
            m.Column("columnName");
            // or
            m.Column(c =>
            {
                c.Name("columnName");
                c.Default("defaultValue");
                c.SqlType("varchar(max)");
                c.Length(SqlClientDriver.MaxSizeForLengthLimitedString + 1);
                c.NotNullable(true);
                c.Check("len(columnName) > 1");
                c.Precision(2);
                c.Scale(2);
                c.Index("column_idx");
                c.Unique(true);
                c.UniqueKey("column_uniq");
            });
            m.Type<string>(); // or IUserType
            m.Update(true);
            m.Insert(true);
            m.Formula("arbitrary SQL expression");
            m.Access(Accessor.Field); // or Accessor.Property or Accessor.NoSetter
            // or
            m.Access(typeof(CustomAccessor));
            m.OptimisticLock(false);
            m.Generated(PropertyGeneration.Insert); // or PropertyGeneration.Always or PropertyGeneration.Never
            m.Lazy(true);
        });

I found this code. May help u.

        Property(x => x.Property, m =>
        {
            m.Column("columnName");
            // or
            m.Column(c =>
            {
                c.Name("columnName");
                c.Default("defaultValue");
                c.SqlType("varchar(max)");
                c.Length(SqlClientDriver.MaxSizeForLengthLimitedString + 1);
                c.NotNullable(true);
                c.Check("len(columnName) > 1");
                c.Precision(2);
                c.Scale(2);
                c.Index("column_idx");
                c.Unique(true);
                c.UniqueKey("column_uniq");
            });
            m.Type<string>(); // or IUserType
            m.Update(true);
            m.Insert(true);
            m.Formula("arbitrary SQL expression");
            m.Access(Accessor.Field); // or Accessor.Property or Accessor.NoSetter
            // or
            m.Access(typeof(CustomAccessor));
            m.OptimisticLock(false);
            m.Generated(PropertyGeneration.Insert); // or PropertyGeneration.Always or PropertyGeneration.Never
            m.Lazy(true);
        });
記柔刀 2024-12-23 21:51:21

当首先使用数据库时,在映射中设置默认值不起作用。
您必须告诉 nhibernate 使用数据库默认值。
为此,首先为数据库中的列设置默认值。

之后,您可以通过执行以下操作告诉 nhibernate 映射忽略插入时的列:

Property(x => x.PropertyName, map =>
        {   map.Insert(false);
            map.Column("FL_COLUMN");                
            map.NotNullable(true);
        });

When using a DataBase first, setting the default value in the mapping doesn´t work.
You have to tell the nhibernate to work with the DataBase Default value.
To do that, first you set the default value for the column in your Database.

After that, you tell the nhibernate mapping to ignore the column at insert by doing this:

Property(x => x.PropertyName, map =>
        {   map.Insert(false);
            map.Column("FL_COLUMN");                
            map.NotNullable(true);
        });
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文