Dav*_*ita 7 .net c# nhibernate
我对nhibernate有一种奇怪的行为.问题是nhibernate在删除实体之前执行更新.我有一个Category类和一个Product类.类别有一袋产品.当我从Category中删除产品时,nhibernate会执行以下操作:
这是映射
<class name="Category">
<id name="Id">
<generator class="hilo" />
</id>
<property name="Name" lazy="false" length="20" />
<bag name="Products" cascade="all-delete-orphan" lazy="false"
inverse="false">
<key column="CategoryId" />
<one-to-many class="Product" />
</bag>
</class>
<class name="Product">
<id name="Id">
<generator class="hilo" />
</id>
<property name="Name" lazy="false" />
<property name="Discontinued" lazy="false" />
<property name="Price" lazy="false" />
<many-to-one name="Category"
class="Category"
column="CategoryId"
cascade="none" />
</class>
Run Code Online (Sandbox Code Playgroud)
这是代码
using (var session = NHibernateHelper.OpenSession())
using (var transaction = session.BeginTransaction())
{
var c1 = session.Load<Category>(32768);
c1.Ps.RemoveAt(0);
session.SaveOrUpdate(c1);
transaction.Commit();
}
Run Code Online (Sandbox Code Playgroud)
这是结果:
exec sp_executesql N'UPDATE Product SET CategoryId = null WHERE
CategoryId = @p0 AND Id = @p1',N'@p0 int,@p1 int',@p0=32768,@p1=65537
go
exec sp_executesql N'DELETE FROM Product WHERE Id = @p0',N'@p0
int',@p0=65537
go
Run Code Online (Sandbox Code Playgroud)
谁能解释这种奇怪的行为?
谢谢.
shf*_*301 12
对类别上的产品包的定义更改为true.将inverse设置为false告诉NHibernate Category对象是关系上键的所有者.
在Products集合上将inverse设置为false,NHibernate将Category视为关系的所有者.因此,当Products集合更改时,它会发出update语句以从Category中删除Product.然后删除是因为删除了产品.
| 归档时间: |
|
| 查看次数: |
3058 次 |
| 最近记录: |