0

두 개의 테이블이 있으며 접합 테이블을 만들 수 있습니다. 이 매핑이 있습니다.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"))); 
    } 

그것은 1 차 키 *, 복합 키 {ProjectId, 사용자 아이디} 내가 잘못 뭐하는 거지

을 설정하지 않고 접합 테이블 만 만들어?

고지.

* 내가 나에 관한이 코드에 대해 들었을 때 나는 그것을 이해하는 것이 이상했다.

CONSTRAINT pk PRIMARY KEY ("ProjectId" , "UserId"), 

EDIT2 :

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; 

가 나는 또한 다음 거기에 같은 라인 expece 것이다 : (더 나은 뷰를)

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"; 
생성 된 테이블이 SQL 코드에 의해 생성된다
+0

의미 : "기본 키로 설정하지 않고 복합 키 {ProjectId, UserId}"가 아닌가요? –

+0

질문에 답변했습니다. – Turambar

+0

그리고 뭐가 문제입니까? –

답변

0

결론적으로 nHibernate에서 복합 기본 키를 사용하려면 nHibernate가 데이터베이스에서 행을 업데이트하는 데 다른 열을 사용해야합니다. 이 여기의

더보기 : http://devlicio.us/blogs/anne_epstein/archive/2009/11/20/nhibernate-and-composite-keys.aspx

나는 그 때문에, 당신은 내가 원하는 것을 달성하기 위해 접합 테이블에 (precice로 1 열) 열을 추가해야한다고 생각합니다.

즐기십시오!