映射

2015-04-23 38 views
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。

回答

2

更改您的映射,

public class NullableMap : ClassMap<Nullable> 
{ 
    public NullableMap() 
    { 
     Table("nullable"); 
     LazyLoad(); 
     Id(x => x.Id).GeneratedBy.Identity().Column("id"); 
     Map(x => x.SenderId, "SenderId").Nullable().Default(null); 
    } 
} 

,其中默認值設置爲空(.Default(null);

+0

謝謝您的回答。我的問題現在解決了。代碼和設置都是正確的,但數據庫中的值不是。昨天有點晚了。 – Jehof

+0

對不起,但不是,您不需要聲明默認值null以在可爲空的列中獲得NULL。一個可能的例外可能是如果有一些映射約定設置了默認值 - 但我不確定這樣的事情能否被這種方式覆蓋,並且有人可能會認爲這是有缺陷的約定,應該修正。 –