Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.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
.net 是否可以有一个可以在NHibernate中编辑的复合id?_.net_Nhibernate_Composite Key_Composite Id - Fatal编程技术网

.net 是否可以有一个可以在NHibernate中编辑的复合id?

.net 是否可以有一个可以在NHibernate中编辑的复合id?,.net,nhibernate,composite-key,composite-id,.net,Nhibernate,Composite Key,Composite Id,我有一种情况,我有很多列用作复合主键的表 糟糕的业务逻辑要求这些是可变的 我使用的是nhibernate,在加载/保存这些映射时没有问题。但是,我需要能够更新属性值,并在调用update时将这些更改反映在DB中 这是一个遗留系统,因此数据库结构没有变化(其可怕之处) 我能用nhibernate解决这个问题吗?nhibernate甚至允许修改其密钥 我正在使用:.net4.0、nhibernate 2.1、fluentnh 1.0和sql server作为后端 您不能使用NHibernate更改P

我有一种情况,我有很多列用作复合主键的表

糟糕的业务逻辑要求这些是可变的

我使用的是nhibernate,在加载/保存这些映射时没有问题。但是,我需要能够更新属性值,并在调用update时将这些更改反映在DB中

这是一个遗留系统,因此数据库结构没有变化(其可怕之处)

我能用nhibernate解决这个问题吗?nhibernate甚至允许修改其密钥


我正在使用:.net4.0、nhibernate 2.1、fluentnh 1.0和sql server作为后端

您不能使用NHibernate更改PK。正如您已经了解到的,您正在处理的结构非常糟糕


您可以使用SQL查询来更改PK。请记住,在再次使用该实体之前,您必须使用新id重新加载该实体。

您不能使用NHibernate更改PK。正如您已经了解到的,您正在处理的结构非常糟糕


您可以使用SQL查询来更改PK。请记住,在再次使用该实体之前,必须使用新id重新加载该实体。

实际上,您没有义务将数据库架构原样映射到域对象

我有一个应用程序,它有一个对象结构,不能用NHibernate在数据库上真正表示它的语义:它需要一个3列的复合id,但关键是有2列被修改的情况。因此,我将一个列属性映射为PK,并自动使用另外两个,从而获得了两个世界中最好的一个


请注意,在这些情况下,二级缓存是一个很大的禁忌

实际上,您没有义务将数据库模式原样映射到域对象

我有一个应用程序,它有一个对象结构,不能用NHibernate在数据库上真正表示它的语义:它需要一个3列的复合id,但关键是有2列被修改的情况。因此,我将一个列属性映射为PK,并自动使用另外两个,从而获得了两个世界中最好的一个


请注意,在这些情况下,二级缓存是一个很大的禁忌

我尝试了这种方法,似乎效果不错。但是,由于它们只有一个主键。对实体的更新将向所有行发送更新,而不仅仅是实体真正对应的那一行。因此,这将生成UPDATE accountAccess SET access=400,其中user=1,而不是UPDATE accountAccess SET access=400,其中user_id=1和account_id=2,在第一次更新中,所有用户帐户访问项都是错误的。第二个是正确的。谢谢你的帮助,巴德。我尝试了这种方法,它似乎工作得很好。但是,由于它们只有一个主键。对实体的更新将向所有行发送更新,而不仅仅是实体真正对应的那一行。因此,这将生成UPDATE accountAccess SET access=400,其中user=1,而不是UPDATE accountAccess SET access=400,其中user_id=1和account_id=2,在第一次更新中,所有用户帐户访问项都是错误的。第二个是正确的。谢谢你的帮助,巴德。我希望我能告诉nhibernate如何处理这件事:(.我曾想过使用自定义sql来处理更改,但那只是打败了nh的紫色。最悲哀的是,几乎每个表都有此设置,并且没有代理键。我也有一个很好的域…叹气。我只是打算使用linq2sql来实现这一点。感谢diego的帮助。我希望我做了些什么错过了我可以告诉nhibernate如何处理这个问题:(.我曾考虑过使用自定义sql来处理更改,但这正好击败了nh的紫色。最悲哀的是,几乎每个表都有此设置,并且没有代理键。我也有一个很好的域…叹气。我只打算使用linq2sql来实现这一点。感谢diego的帮助。