0

给定下表:

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对象时,如果我保留它的默认AccountTypeAccountType.Nonethen 写入数据库时​​它会尝试插入 a 0(这是有道理的),但是由于我们对表有外键限制,所以会引发异常。我们需要插入 null 或引用表中存在的值。

我的问题是:NHibernate 是否可以这样说:“如果我的枚举没有设置,那么将 null 写入该列的数据库?”

4

2 回答 2

3

在类中将您的枚举声明为可为空的属性/字段,以便默认值为空。

例如:

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

如果您想坚持 DB 中 AccountStatus.None <=> NULL 的 conecpt,那么您应该查看 NHibernate IUserType 接口。使用此接口,您可以提供将应用程序值来回转换为 DB 值的自定义逻辑。

于 2013-01-17T17:31:58.410 回答
0

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

于 2013-01-18T02:11:57.070 回答