Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/hibernate/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在没有主键的表上使用NHibernate_Nhibernate - Fatal编程技术网

在没有主键的表上使用NHibernate

在没有主键的表上使用NHibernate,nhibernate,Nhibernate,我(希望)即将开始我的第一个NHibernate项目,遇到了一个绊脚石。如有任何建议,我将不胜感激 我正在从事一个项目,在这个项目中,我的新代码将与遗留代码并行运行,而我根本无法更改数据模型。我遇到了一种情况,其中一个主表没有主键。是这样的: 假设有一个订单表和一个产品表,以及一个列有每个订单中的产品的行项目表(即由订单id、产品id和数量组成)。在这个数据模型中,很有可能在相同的订单中有相同产品的两个行项目。在现有代码中,每当用户更新行项目时,该订单的所有行项目都会被删除并重新插入。因为即使是

我(希望)即将开始我的第一个NHibernate项目,遇到了一个绊脚石。如有任何建议,我将不胜感激

我正在从事一个项目,在这个项目中,我的新代码将与遗留代码并行运行,而我根本无法更改数据模型。我遇到了一种情况,其中一个主表没有主键。是这样的:

假设有一个订单表和一个产品表,以及一个列有每个订单中的产品的行项目表(即由订单id、产品id和数量组成)。在这个数据模型中,很有可能在相同的订单中有相同产品的两个行项目。在现有代码中,每当用户更新行项目时,该订单的所有行项目都会被删除并重新插入。因为即使是行项目表中所有字段的复合键也不一定是唯一的,所以这是在该数据模型中更新行项目的唯一可能的方法

我准备保证我不会试图更新或删除单独的行项目。我可以让我的NHibernate代码以与现有代码相同的方式工作吗?如果不是,这是否意味着我(a)根本不能使用NHibernate;(b) 我无法使用NHibernate映射行\项目表;或者(c)我仍然可以映射这个表,但不能映射它的关系


提前感谢您提供的任何建议

我认为如果您将其映射为订单上的行李收集(使用reverse=“false”),它将起作用

注:大型NHibernate袋 使用reverse=“false”是无效的 应该避免;亚硝酸铵 无法创建、删除或更新行 单独,因为没有密钥 这可用于识别 单独一行


他们警告不要这样做,但这听起来像是你想要的。

我认为如果你将它映射为订单上的一个袋子集合(使用reverse=“false”),它会起作用

注:大型NHibernate袋 使用reverse=“false”是无效的 应该避免;亚硝酸铵 无法创建、删除或更新行 单独,因为没有密钥 这可用于识别 单独一行


他们对此提出了警告,但这听起来像是你想要的。

我个人认为你将很难在NH中实现这一点。添加自动递增ID列是否会破坏传统应用程序?(如果没有PK列,用
DELETE
/
INSERT
而不是
UPDATE
,这已经够糟糕的了,那么我假设它也可以做
SELECT*
的可能性大于零…)从我的判断来看,现有的应用程序确实做了“SELECT*”,但它似乎是通过名称而不是索引来访问字段的。然而,我真的不想冒险弄乱数据模型,以防万一,我个人认为你将很难让NH实现这一点。添加一个自动递增的ID列会破坏传统的应用程序吗?(如果没有PK列,用
DELETE
/
INSERT
而不是
UPDATE
,这已经够糟糕的了,那么我假设它也可以做
SELECT*
的可能性大于零…)从我的判断来看,现有的应用程序确实做了“SELECT*”,但它似乎是通过名称而不是索引来访问字段的。不过,我真的不想冒险弄乱数据模型以防万一,谢谢,我一定会尝试一下。我真的很想在这个项目上使用NHibernate,但如果它不能处理这一关系,它可能会阻止我的表演。谢谢,我一定会尝试一下。我真的很想在这个项目上使用NHibernate,但如果它不能处理这一关系,它可能会阻碍我的表演。