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