gpt4 book ai didi

c# - 等效于 NHibernate IStatelessSession 的 Load 方法

转载 作者:行者123 更新时间:2023-11-30 14:37:01 31 4
gpt4 key购买 nike

我正在使用 NHibernate 将行批量插入到我的数据库中。由于要插入的数据量很大,我使用的是 IStatelessSession 而不是 ISession。我插入的对象使用分配的标识(即没有生成 hilo 或 guid——唯一的 id 被分配给对象)。

我的问题是我有一个对象(例如 Foo),它具有对另一个对象(例如 Bar)的多对一引用。我首先插入所有 Bar 对象,这没有问题。

当我想插入 Foo 对象时,问题就来了。我知道每个 Bar 对象的唯一标识符,但我不想为了设置 上的属性而必须从数据库中检索每个 Bar 对象>Foo 对象,然后再插入它。

现在可能是展示一个简单示例的好时机:

public class Foo {
// Unique identifier (assigned)
public virtual int Id { get; set; }

// Many-to-one reference to a Bar object
public virtual Bar Bar { get; set; }
}

public class Bar {
// Unique identifier (assigned)
public virtual int Id { get; set; }
}

假设我想创建一个新的 Foo 对象,其 Id 为(比方说)1234,它引用一个 Bar 对象,该对象具有一个 Id(比如)4567。我知道已经有一个带有此标识符的 Bar 对象,因为我之前已经添加了所有 Bar 对象。

如何添加 Foo 对象而不必再次从数据库中检索 Bar 对象?

最佳答案

奇怪的是,有时如果您花时间提出您的问题,您很快就会知道答案。

您所做的是创建一个虚拟对象,其中包含 Id 且未设置任何其他内容。

第 1 步:插入条形对象

using (var session = SessionFactory.OpenStatelessSession())
{
using (var tx = session.BeginTransaction())
{
var bar = new Bar
{
Id = 1234,
// and populate all of the other
// properties that you would put here
};
session.Insert(bar);
tx.Commit();
}
}

第 2 步:插入带有虚拟 Bar 对象的 Foo 对象

using (var session = SessionFactory.OpenStatelessSession())
{
using (var tx = session.BeginTransaction())
{
var foo = new Foo
{
Id = 4567,
// dummy Bar object that has an Id and nothing else
Bar = new Bar {Id = 1234}
};
session.Insert(foo);
tx.Commit();
}
}

但如果有人有更好的方法(例如,不需要创建大量虚拟对象),我将不胜感激。

关于c# - 等效于 NHibernate IStatelessSession 的 Load 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9800984/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com