2011-02-19 5 views
10

웹 응용 프로그램에서 데이터 지속성을 위해 Fluent NHibernate를 사용하고 있습니다.Fluent NHibernate 생성되고 할당 된 ID 열

내 문제 ... 나는 유형의 ID 속성 T (거의 항상 INT 또는 GUID) generatedBy를()를 사용하여 모든 개체를 매핑하는 기본 클래스가 있습니다. 신원()

을 응용 스타트 업에 , 필자는 필요한 시드 (seed) 데이터가 채워지는지 확인하고 확인하는 부트 스트 래퍼 (boot-strapper)를 가지고 있습니다. 내 문제는 채워지는 시드 데이터 중 일부에 특정 ID가 필요하다는 것입니다.

보다는, 사용자가 지정한ID를 사용하여 기록을 저지 NHibernate에 강제로 어떤 방법이 있나요 (열거 나 시스템 사용자에 해당한다 ID를) 자동 생성을? 이후 저장소에 대한 다른 모든 커밋은 자동으로 생성 될 수 있습니다.

답변

26
Id(x => x.Id).GeneratedBy.Assigned(); 

응용 프로그램에서 (NHibernate에서 생성 한 것과 달리) 식별자를 할당하려면 할당 된 생성기를 사용할 수 있습니다. 이 특수 생성기는 이미 객체의 식별자 속성에 할당 된 식별자 값을 사용합니다. 이 기능을 사용하여 비즈니스 의미 (거의 항상 끔찍한 디자인 결정)로 키를 할당 할 때는 매우 조심하십시오.

본질적으로이 생성기를 사용하는 엔티티는 ISession의 SaveOrUpdate() 메소드를 통해 저장할 수 없습니다. 대신 Save() 또는 Update() 메서드를 호출하여 ISession 메서드를 호출하여 개체를 저장하거나 업데이트해야하는 경우 NHibernate를 명시 적으로 지정해야합니다.

http://nhibernate.info/doc/nhibernate-reference/mapping.html#mapping-declaration-id-assigned

1

당신이 사용할 수있는

Id(I => I.Id).GeneratedBy.Increment(); //Increment by 1