Csharp/C#教程:NHibernate多对多关系问题:可以选择,无法更新分享


NHibernate多对多关系问题:可以选择,无法更新

每个用户都有一个角色列表:

          

我正在跟踪SQL服务器的所有查询。 当我选择用户时,我也看到了SQL SELECT语句(这是好的)。 问题是当我尝试更新现有用户(具有角色)时:我只看到User表的更新,但没有User_Role (这是坏的)。

澄清一下:我不希望在Role表中插入/更新(但在User_Role ,因为角色是“永久的”并且可以自由地附加和分离。

为什么选择正常,但不更新 。 请? 如果需要更多信息 – 请问 – 我会尝试回答所有次要问题。

更新: Role映射:

         

更新N2:这是表的定义方式:

Role表:

 CREATE TABLE [Roles] ( [Id] INTEGER NOT NULL PRIMARY KEY, [Name] text NOT NULL, [LastChanged] INT NOT NULL DEFAULT(0) ); CREATE UNIQUE INDEX uidxUserName ON Roles (Name COLLATE NOCASE); 

User表:

 CREATE TABLE [Users] ( [Id] INTEGER NOT NULL PRIMARY KEY, [Name] text NOT NULL, [LastChanged] INT NOT NULL DEFAULT(0) ); CREATE UNIQUE INDEX uidxRoleName ON Users (Name COLLATE NOCASE); 

User_Role relatioin表(外键):

 CREATE TABLE [User_Role] ( [UserId] INTEGER NOT NULL, [RoleId] INTEGER NOT NULL, [LastChanged] INT NOT NULL DEFAULT(0), PRIMARY KEY (UserId, RoleId), FOREIGN KEY (UserId) REFERENCES Users(Id), FOREIGN KEY (RoleId) REFERENCES Roles(Id) ); 

我自己遇到了类似的问题。

尝试删除User集合和Role集合上的inverse="true" ,看看是否有任何区别。 这对我有用。

似乎存在一些具有多对多关系和inverse属性的意外行为。 也许其他人可以解释为什么这比我发生得更好。 ?

更新:如果我没有弄错,你需要在角色映射下映射多对多包。 尽量保持inverse="false"或完全没有inverse属性。
你确定那里使用的foreign-key价值吗?

另外,我认为在映射class属性时,需要提供完全限定的名称,即: Namespace.Class, Assembly

除此之外,它看起来大多像我自己的映射文件。

     

另外: lazy="false"几乎总是一个坏主意。

上述就是C#学习教程:NHibernate多对多关系问题:可以选择,无法更新分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/999646.html

(0)
上一篇 2021年12月26日
下一篇 2021年12月26日

精彩推荐