我如何设置一个默认值与NHibernate的枚举
本文关键字:枚举 默认值 NHibernate 一个 何设置 设置 | 更新日期: 2023-09-27 17:53:54
给出以下表格:
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
)
,并给出以下enum定义:
public enum AccountType
{
None = 0,
Savings = 1,
Checking = 2
}
当我创建一个Account
对象时,如果我离开AccountType.None
的默认AccountType
值,那么在写入数据库时,它会尝试插入0
(这是有意义的),但由于我们在表上有一个外键限制,那么会抛出异常。我们需要插入null或一个存在于被引用表中的值。
我的问题是:是否有可能与NHibernate说类似"如果我的enum没有设置,然后写null到该列的数据库?"
将枚举声明为类中的可空属性/字段,这样默认值将为空。
例如:public class Entity
{
public int Id { get; set; }
public AccountStatus? Status { get; set;}
}
如果你想坚持AccountStatus的概念。在数据库中没有<=> NULL,那么你应该看看NHibernate IUserType接口。使用此接口,您可以提供自定义逻辑,将应用程序值来回转换为DB值。
您可以将相应的值添加到AccountType
表中,用于AccountType.None
,这毕竟是您在POCO枚举中定义的值。这样您就不必处理Nullable<AccountType>
,并且您的数据库更好地映射到您的应用程序。