hereと記載されている2つの異なるテーブルのプロパティで構成されるエンティティがあり、新しいアイテムを挿入しようとすると問題が発生します。挿入するときは、2つのテーブルのうちの1つのフィールドのみを更新する必要があります。 ReadOnly()
メソッドを使って、私は保存時に[RegistrationField]
のフィールドのほとんどを無視するようにNHibernateを得ることができました。しかし、そのキーのエントリがすでに存在していても、外部キーの新しいエントリを[RegistrationField]
に保存しないようにすることはできません。マルチテーブルエンティティの保存時に1つのテーブルのみを更新する
クラスのための私のマッピングは次のとおりです。
INSERT INTO AccountRegistrationField (
AccountID,
DefaultValue,
FieldID,
IsRequired,
Label,
Priority)
VALUES (@p0, @p1, @p2, @p3, @p4, @p5);
select SCOPE_IDENTITY();
@p0 = 1 [Type: Int32 (0)],
@p1 = 'bar' [Type: String (4000)],
@p2 = 1 [Type: Int32 (0)],
@p3 = False [Type: Boolean (0)],
@p4 = 'bar' [Type: String (4000)],
@p5 = 1 [Type: Int32 (0)]
INSERT INTO RegistrationField (UserRegistrationField_id) VALUES (@p0);
@p0 = 12 [Type: Int32 (0)]
私はそれを必要とする:
public class RegistrationFieldMap : ClassMap<RegistrationField>
{
public RegistrationFieldMap()
{
Table("AccountRegistrationField");
Id(r => r.ID).Column("RegistrationID");
Map(r => r.AccountID);
Map(r => r.DefaultValue);
Map(r => r.FieldID);
Map(r => r.IsRequired);
Map(r => r.Label);
Map(r => r.Priority);
Join("RegistrationField", t =>
{
t.Map(r => r.FieldType).ReadOnly();
t.Map(r => r.HtmlID).ReadOnly();
});
}
}
私はマッピングを確認するために私のテストを実行して、NHibernateのは以下の2つのSQL文を実行しようとします[RegistrationField]
テーブルには値の静的リストが含まれており、新しい項目を絶対に追加しないでください。最初のステートメントを実行します。
任意のすべての提案を歓迎します。
待ち、その後、 'Join'がある:
はそして
AccountRegistrationField
のための私のマッピングは次のようになります。私
AccountRegistrationField
クラスは、このように見てしまいましたあなたが必要とするものではありません。あなたが問題を説明したやり方で私はそう思っていましたが、あなたはおそらく定期的なリファレンスを使用しているはずです –私はこの1つについてDiegoに同意しなければなりません。 – Phill