【发布时间】:2012-12-05 08:31:09
【问题描述】:
我有两张表,我想创建一个联结表。我有这个映射。
public UsertMap()
{
Table("Users");
Id(x => x.Id, map => map.Generator(Generators.Assigned));
Property(x => x.FirstName, map => map.NotNullable(true));
Property(x => x.LastName, map => map.NotNullable(true));
Property(x => x.Role, map => map.NotNullable(true));
Bag(x => x.Projects, map =>
{
map.Table("UsersInProject");
map.Cascade(Cascade.None);
map.Access(Accessor.Field);
map.Key(u => u.Column("UserId"));
}, a => a.ManyToMany(x => x.Column("ProjectId")));
}
和
public ProjectMap()
{
Table("Projects");
Id(x => x.Id, map => map.Generator(Generators.Assigned));
Property(x => x.SubmissionDate, map =>map.NotNullable(true));
Property(x => x.QuotesubmissionDate, map => map.NotNullable(true));
Bag(x => x.ProjectUsers, map =>
{
map.Table("UsersInProject");
map.Cascade(Cascade.None);
map.Access(Accessor.Field);
map.Key(u => u.Column("ProjectId"));
}, a => a.ManyToMany(x => x.Column("UserId")));
}
它创建了联结表,但没有设置为主键*,复合键 {ProjectId , UserId}
我做错了什么?
提前感谢。
*当我被告知有关我的代码时,我也很奇怪地理解它。 创建的表就是通过这个sql代码创建的:
CREATE TABLE "UsersInProject"
(
"ProjectId" uuid NOT NULL,
"UserId" uuid NOT NULL,
CONSTRAINT fk28998796db607aa2 FOREIGN KEY ("UserId")
REFERENCES "Users" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION,
CONSTRAINT fk28998796f9a8d344 FOREIGN KEY ("ProjectId")
REFERENCES "Projects" ("Id") MATCH SIMPLE
ON UPDATE NO ACTION ON DELETE NO ACTION
)
WITH (
OIDS=FALSE
);
ALTER TABLE "UsersInProject"
OWNER TO test;
我也希望有一条像下面这样的行:
CONSTRAINT pk PRIMARY KEY ("ProjectId" , "UserId" ),
edit2:(为了更好的视图)
drop table if exists "UsersInProject" cascade;
create table "UsersInProject" (
"ProjectId" uuid not null,
"UserId" uuid not null
);
alter table "UsersInProject"
add constraint FK28998796DB607AA2
foreign key ("UserId")
references "Users";
alter table "UsersInProject"
add constraint FK28998796F9A8D344
foreign key ("ProjectId")
references "Projects";
【问题讨论】:
-
什么意思:“但是没有设置为主键,复合键 {ProjectId , UserId}”?
-
我编辑回答你的问题。
-
还有什么问题?
-
您在此处显示的创建表脚本不是由 NHibernate 创建的。它很可能是一个手写的 SQL 脚本。
-
是的,当然不是。上面的代码是这样做的:如果存在“UsersInProject”级联,则删除表;创建表“UsersInProject”(“ProjectId”uuid 不为空,“UserId”uuid 不为空);更改表“UsersInProject”添加约束 FK28998796DB607AA2 外键(“UserId”)引用“用户”;更改表“UsersInProject”添加约束 FK28998796F9A8D344 外键(“ProjectId”)引用“Projects”;
标签: nhibernate many-to-many nhibernate-mapping junction-table conform