我有一个实体由两个不同表的属性组成,如我所描述的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