NHibernate. Соответствуют. Установить составной первичный ключ в соединительной
У меня есть две таблицы, и я палочка, чтобы создать соединительную таблицу. У меня есть это отображение.
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";
1 ответ
Я пришел к выводу, что для того, чтобы иметь составной первичный ключ в nHibernate, вам придется использовать другой столбец, который будет использоваться для обновления строки в базе данных с помощью nHibernate.
Подробнее об этом здесь: http://devlicio.us/blogs/anne_epstein/archive/2009/11/20/nhibernate-and-composite-keys.aspx
Я считаю, что из-за этого вы должны добавить больше столбцов (1 столбец, чтобы быть точным) в соединительной таблице, чтобы достичь того, что я хотел.
Наслаждайтесь!