【问题标题】:FluentNHibernate - Setting default value for DB columns (SQL Server)FluentNHibernate - 为 DB 列设置默认值 (SQL Server)
【发布时间】:2009-10-15 11:28:33
【问题描述】:

有谁知道我可以通过映射列的默认值来设置的方法,例如当我从映射生成数据库时,我会拥有将 getdate() 作为默认值的 DateTime 列吗?

到目前为止,我尝试过这个(看起来完全像我需要的那样),但它不起作用

this.Map(x => x.LastPersistedOn, "DateModified") 
    .Access.Property() 
    .Default("getdate()"); 

【问题讨论】:

  • 我在 fluent 1.0 中遇到了同样的问题,而且似乎没有解决方案 - 您可以通过事件来解决,但这并不总是合适的。还有其他人吗?

标签: sql-server fluent-nhibernate column-defaults


【解决方案1】:

我刚刚尝试设置一些默认值,它按预期工作。我正在使用 Fluent 从 Git 检索 24.05.2010,因此更新您的副本可能会解决您的问题。
映射

public class SampleEntity
{
    public virtual DateTime DateTimeProperty { get; set; }
}

 public class SampleEntityMap
        : ClassMap<SampleEntity>
{
   public SampleEntityMap()
   {
    Map(x => x.DateTimeProperty, "DateTimeColumn")
             .Access.Property()  //actually not necessary 
             .Not.Nullable()
             .Default("getDate()");
   }
}

这将产生以下 sql(从输出到控制台)

create table SampleEntity(
   DateTimeColumn DATETIME default  getDate()  not null
  )

--
多姆

【讨论】:

    【解决方案2】:

    这样做的方法是在代码中分配当前日期时间,而不是使用数据库中的默认值。然后将其视为普通列。起初我来自模型驱动设计背景,这对我来说似乎有点奇怪,但在 POCO 级别管理默认值是 DDD 的方式。

    听听别人的意见也不错

    【讨论】:

    • 我遇到的问题是它取决于用户的时钟。如果不是最终用户,如果您的应用程序在两个不同的时区运行,那已经足够复杂了。
    • 其他需要考虑的是现有数据。我知道这是一篇旧文章,但是如果您要向现有的类/表/映射添加一个新字段,您并不总是希望默认值是通常的默认值(例如您想要的布尔列在所有现有记录中默认为真)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-29
    • 2014-08-18
    • 2010-11-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多