我如何设置一个默认值与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到该列的数据库?"

我如何设置一个默认值与NHibernate的枚举

将枚举声明为类中的可空属性/字段,这样默认值将为空。

例如:

public class Entity 
{
  public int Id { get; set; }
  public AccountStatus? Status { get; set;}
}

如果你想坚持AccountStatus的概念。在数据库中没有<=> NULL,那么你应该看看NHibernate IUserType接口。使用此接口,您可以提供自定义逻辑,将应用程序值来回转换为DB值。

您可以将相应的值添加到AccountType表中,用于AccountType.None,这毕竟是您在POCO枚举中定义的值。这样您就不必处理Nullable<AccountType>,并且您的数据库更好地映射到您的应用程序。