Dav*_*ita 10 mapping nhibernate fluent-nhibernate
我有一个非常简单的单向映射.见下文:
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
public PhoneNumberMap()
{
Id(x => x.Id).GeneratedBy.Native();
Map(x => x.Number);
Table("ContactNumbers");
}
Run Code Online (Sandbox Code Playgroud)
根据nhibernate 3及更高版本之后的这篇文章,将key设置为non-nullable应该修复insert-update问题(当NHibernate发出插入时外键设置为null然后更新以更新外键以纠正值时的问题) ,但事实并非如此.当我将密钥设置为不可为空时,NHibernate会发出正确的插入语句
INSERT INTO ContactNumbers
(Number,
ContactId)
VALUES ('(212) 121-212' /* @p0 */,
10 /* @p1 */);
Run Code Online (Sandbox Code Playgroud)
如您所见,它会插入ContactId字段,但在此之后,它仍会发出update语句
UPDATE ContactNumbers
SET ContactId = 10 /* @p0 */
WHERE Id = 34 /* @p1 */
Run Code Online (Sandbox Code Playgroud)
所以要澄清问题.NHibernate使用正确分配的外键插入Contact行,然后发出更新语句以更新冗余的外键(ContactId).
如何摆脱这种冗余的更新声明?谢谢.
顺便说一下,我正在使用最新版本的NHibernate和Fluent NHibernate.数据库是SQLite
haz*_*zik 22
您必须设置"updatable"=false密钥才能阻止更新.
public ContactMap()
{
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Name);
References(x => x.Device);
HasMany(x => x.Numbers)
.Not.Inverse()
.Not.KeyNullable()
.Not.KeyUpdate() // HERE IT IS
.Cascade.AllDeleteOrphan()
.Not.LazyLoad()
.Fetch.Subselect();
Table("Contacts");
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2943 次 |
| 最近记录: |