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、デフォルトAccountType値のthenのままにすると、データベースに書き込むときに(これは理にかなっています)AccountType.None挿入しようとしますが、テーブルに外部キー制限があるため、例外がスローされます。0nullまたは参照されるテーブルに存在する値のいずれかを挿入する必要があります。

私の質問は、NHibernateで「列挙型が設定されていない場合は、その列のデータベースにnullを書き込む」などと言うことは可能ですか?

4

2 に答える 2

3

列挙型をクラスのnull許容プロパティ/フィールドとして宣言し、デフォルト値がnullになるようにします。

例えば:

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

DBでAccountStatus.None<=>NULLのconecptに固執したい場合は、NHibernateIUserTypeインターフェースを確認する必要があります。このインターフェイスを使用すると、アプリケーション値をDB値に変換するカスタムロジックを提供できます。

于 2013-01-17T17:31:58.410 に答える
0

AccountType対応する値をテーブルに追加できますAccountType.None。これは、結局のところ、POCO列挙型で定義したものです。このようにしてNullable<AccountType>、データベースを処理する必要がなくなり、データベースがアプリケーションにより適切にマッピングされます。

于 2013-01-18T02:11:57.070 に答える