4
我已经通过FluentMapping映射
public class RuleMap : ClassMap<Rule>
{
public RuleMap()
{
Table("NEW");
Id(x => x.Id, "Id").Not.Nullable();
Map(x => x.SenderId, "SenderId").Nullable();
}
}
定义的以下映射为下面的类
public class Rule
{
public virtual int Id { get; set; }
public virtual int? SenderId { get; set; }
}
我在数据库表被定义为
USE [Test]
GO
/****** Object: Table [dbo].[NEW] Script Date: 23.04.2015 22:14:53 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[NEW](
[Id] [int] NOT NULL,
[SenderId] [int] NULL,
CONSTRAINT [PK_NEW] PRIMARY KEY CLUSTERED
(
[Id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
在0可为空的属性的结果,但不为空
并且有一个单一的条目
Id | SenderId
1 | `NULL`
现在,当我通过我的SessionFactory
var rules = sessionFactory.QueryOvery<Rule>.List();
列表中包含1项(到目前为止好)加载所有的规则,但该属性SenderId
的值为和不是NULL我有预料。
那么我在这里做错了什么?
使用NHibernate 3.1和FluentNHibernate 1.2。
谢谢您的回答。我的问题现在解决了。代码和设置都是正确的,但数据库中的值不是。昨天有点晚了。 – Jehof
对不起,但不是,您不需要声明默认值null以在可为空的列中获得NULL。一个可能的例外可能是如果有一些映射约定设置了默认值 - 但我不确定这样的事情能否被这种方式覆盖,并且有人可能会认为这是有缺陷的约定,应该修正。 –