鉴于以下表格:
create table TypeAccount
(
AccountTypeID int primary key identity(1,1),
[Description] varchar(100) not null
)
create table Account
(
--AccountID char(32) primary key not null,
AccountID int primary key identity(1,1),
AccountName varchar(50),
AccountTypeID int foreign key references TypeAccount(AccountTypeID),
CreateDate datetime
)
并给出以下枚举定义:
public enum AccountType
{
None = 0,
Savings = 1,
Checking = 2
}
当我创建Account
对象时,如果我保留AccountType
的默认AccountType.None
值,那么在写入数据库时它会尝试插入0
(这会使感觉)但由于我们对表有外键限制,因此抛出异常。我们需要插入null或引用表中存在的值。
我的问题是:NHibernate是否可以说“如果我的枚举没有设置,那么将null写入该列的数据库?”
答案 0 :(得分:3)
在类中声明你的枚举为可为空的属性/字段,因此默认值为null。
例如:
public class Entity
{
public int Id { get; set; }
public AccountStatus? Status { get; set;}
}
如果你想坚持使用AccountStatus.None< =>的conecpt在DB中为NULL,那么你应该看看NHibernate的IUserType接口。使用此接口,您可以提供自定义逻辑,将应用程序值来回转换为DB值。
答案 1 :(得分:0)
您可以为AccountType
表添加相应的值,AccountType.None
,这毕竟是您在POCO枚举中定义的值。这样您就不必处理Nullable<AccountType>
,并且您的数据库可以更好地映射到您的应用程序。