【发布时间】:2014-02-25 11:38:41
【问题描述】:
我有相关的表格。
例如 -
Worker (id, mame, idWorkerType, ...) 和 WorkerType (id, code (unique key), ...)
然后我有相同的类,这是映射的。
然后,我有这样的生成对象列表
- 工人1
- Id1
- 姓名1
- WorkerType1
- IdType1
- 代码类型1
- 工人2
- Id2
- 姓名2
-
WorkerType1
- IdType1
- 代码类型1
... - IdType1
- Id2
逻辑如下:
foreach (var Worker in Workers)
{
var WorkerTypeFromDB = GetWorkerTypeByField("Code", Worker.WorkerType.Code).FirstOrDefault();
if (WorkerTypeFromDB == null)
{
session.Insert(Worker.WorkerType);
}
else
{
session.Update(Worker.WorkerType);
}
var WorkerFromDB = GetWorkerByField("Code", Worker.Code).FirstOrDefault();
if (WorkerFromDB == null)
{
session.Insert(Worker);
}
else
{
session.Update(Worker);
}
}
所以,在第一次迭代中,我插入了 WorkerType1 和 Worker1。
在第二次迭代中,我更新了 WorkerType1(因为相同的唯一代码)并尝试插入 Worker2...但我不能!
我得到异常 - 对象引用了一个未保存的瞬态实例 - 在刷新之前保存瞬态实例或将属性的级联操作设置为使其自动保存的内容。
我知道,这是因为我没有插入 WorkerType,但我不需要它。我已经在 db 中有 WorkerType1。
有人解释一下如何解决这个问题?
【问题讨论】:
标签: c# mysql nhibernate