首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >NHibernate FluentMapping

NHibernate FluentMapping
EN

Stack Overflow用户
提问于 2016-02-29 06:35:28
回答 1查看 315关注 0票数 0

我有下面的fluent映射类。对象位置上的组件(属性)类型设置为空字符串的默认值,不能为空。当插入时,我得到一个异常,说明我需要指定Type (不能为空),它不应该使用指定的默认值吗?

代码语言:javascript
复制
public class LocationMapping : FluentNHibernate.Mapping.ClassMap<Cradle.DomainEntities.Location>
    {
        public LocationMapping()
        {
            Id(x => x.ID);
            Map(x => x.Barcode).CustomSqlType("varchar(30)").Unique().Not.Nullable();
            Map(x => x.Name).CustomSqlType("varchar(30)").Not.Nullable();
            Map(x => x.Site).CustomSqlType("varchar(30)").Not.Nullable().Default("");
            Map(x => x.ERPLocation).CustomSqlType("varchar(15)").Not.Nullable().Default("");
            Component<Cradle.DomainEntities.Status>(x => x.Status, c => { c.Map(x => x.Name, "Status").CustomSqlType("varchar(20)"); });
            Component<Cradle.DomainEntities.Type>(x => x.Type, c => { c.Map(x => x.Name, "Type").CustomSqlType("varchar(20)").Default("").Not.Nullable(); });
            Component<Cradle.DomainEntities.Category>(x => x.Category, c => { c.Map(x => x.Name, "Category").CustomSqlType("varchar(20)"); });
            Map(x => x.isActive).Not.Nullable().Default("1");
            Map(x => x.NonStock).Not.Nullable().Default("0");
        }
    }

Component<Cradle.DomainEntities.Type>(x => x.Type, c => { c.Map(x => x.Name, "Type").CustomSqlType("varchar(20)").Default("").Not.Nullable(); });
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-02-29 13:30:19

在映射中定义Default不会更改.Net默认值。

实例化Location类时,我猜您的Type属性没有初始化(没有初始化值或构造函数没有设置它),因此具有字符串的默认.Net值:null

NHibernate不会用您声明的Default替换该null。它怎么能猜到它不是自愿设置为空的呢?

应在类定义中使用其默认值初始化类属性。

尽管如此,还是可以使用一种解决办法。对于string属性和其他可空属性,您可以在类上使用dynamic-insert选项,因为它导致NHibernate不向DB发送为null的属性。

见医生:

(8)动态插入(可选,默认为false):指定在运行时生成INSERT SQL,并且只包含值不是null的列。

当然,它不能使用具有非空类型的属性。

那么,在映射中定义缺省值的官方支持的目的是什么?我只知道一个:从映射中生成DB模式以生成列的默认约束。

我们可以考虑dynamic-insert选项应该考虑到这些缺省值。但是如果是这样的话(也许是这样,NHibernate文档有时会落后于实现的功能),这将导致我建议的‘解决方案’失败,因为动态插入的行为应该只包含值等于其在映射中声明的默认值的列,或者如果它们没有声明的缺省值,则为null。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35693300

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档