我有一個實體由兩個不同表的屬性組成,如我所描述的here,當我嘗試插入新項目時遇到問題。插入時,我只需要更新兩個表格之一中的字段。使用ReadOnly()
方法,我已經能夠讓NHibernate在保存時忽略來自[RegistrationField]
的大部分字段。然而,即使該密鑰的條目已經存在,我也無法使它不嘗試爲外鍵保存[RegistrationField]
的新條目。只更新一個表保存多表實體
我爲類的映射是:
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的嘗試運行以下兩個SQL語句:
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)]
我只需要它運行第一條語句,因爲[RegistrationField]
表包含一個靜態值列表,並且永遠不應該添加新項目。
歡迎任何和所有建議。
等待,如果RegistrationField是一個查找表,然後`Join`是** *不***你需要什麼。你描述問題的方式讓我覺得這樣,但你應該使用一個常規的參考 – 2010-11-29 20:19:26