2011-02-14 2 views
0

나는Fluent Nhibernate에서 Nullable이 아닌 참조를 작성해야합니까?

public class Settings : ClassMap<Setting> 
{ 
    References(x => x.User).Not.Nullable(); 
} 

지금 때마다 내가 그렇지 않으면 내가 널없는 속성이 널 (null)를 참조

얻을 그것을 사용자 개체를주고 내가 가지고 설정을 저장하려면 내지도에 이런 일이 또는 일시적인 값

제 생각에는 관계형 제약 조건을 적용 할 것입니다. 그러나 실제로 Fk를 사용해야 할 때 전체 객체를 전달해야한다는 것이 이상하게 보입니다.

내부적으로 모든 것을 다시 저장하지 않고 Fk를 추가하여 관계형 제약 조건을 유지하기를 바랍니다.

나는 올바른 방법을 사용하고 있습니까?

편집

public class Settings : ClassMap<Setting> 
{ 
     Id(x => x.SettingId); 
     Map(x => x.Something); 
     Map(x => x.Something2); 
     References(x => x.User).Not.Nullable(); 
} 


Public class User: ClassMap<User> 
{ 
    Id(x => x.UserId); 
    Map(x => x.FirstName); 
    Map(x => x.LastName); 
    HasOne(x => x.Settings); 
    HasMany(x => x.AnotherTable); 
} 


Settings s = new Settings() 
{ 
     Something = "142", 
     Something2 = "1421414" 
}; 

session.Create(s); // this will crash as s.User equals null; 

나는 사용자 = 사용자 않았기 때문에 궁금하고 지금이

User user = repo.GetUser("userId"); 

Settings s = new Settings() 
{ 
     Something = "142", 
     Something2 = "1421414", 
     User = user 
}; 

session.Create(s); // this should work. 

을 할 수있다; nhibernate가 userId를 잡고 설정 tbl에 저장합니까 아니면 사용자 테이블에서 변경 사항을 확인한 다음 "다른 테이블"에서 변경 사항을 확인합니까?

또는 사용자 테이블과 다른 테이블의 모든 필드를 깜박입니다.

그게 전체 개체를 저장한다는 의미일까요?

+0

"null이 아닌 속성 참조가 null 또는 일시적인 값"으로 실패하면 테스트를 게시 할 수 있으므로 수행중인 작업과 예상하고있는 작업을 정확히 알 수 있습니까? –

답변

1

아니요, 사용자 개체를 다시 저장하거나 업데이트하지 않습니다. 그것은 이드와 Fk 칼럼 만 업데이트합니다. 배후에서 어떤 일이 일어나고 있는지 알지 못하면 SQL Server Profiler (DB가 MSSQL 인 경우) 또는 NHibernate Profiler을 사용해보십시오.

덧붙여서,이 점을 확인해두면, NHibernate의 다른 저장/갱신/삭제 캐스케이드의 방법에 대해 알려줍니다. ayende's post.

+0

좋아요. 가능한 곳에서 .Load를 사용해야한다고 생각합니다. – chobo2

+0

개체를 이미 가지고 있는지 궁금합니다. User = user; 또는 할 수 있으면 항상로드를 사용해야합니까? – chobo2

+0

예, 그렇게하는 것이 의미입니다. Id 만 가지고있을 때만'.Load' 만 사용하고이 ID가 유효하다는 것을 알 수 있습니다. – goenning

2

당신은 NHibernate에게 .Not.Nullable()을 사용하여 null에 대해이 속성의 유효성을 검사하라고 말하고 있습니다.

물론 메시지가 null 인 경우 불만을 제기합니다.

당신이 null로하려면

단지 ... 그렇지 않으면 :-)

업데이트를 말하지 마 : 난 아직도 당신의 관심사가 무엇인지 이해하는 문제가 발생하고있다. 당신이 User 인스턴스를 검색한다면 (실제로 ID가 있다면 Id가 있고 심지어 session.Load을 사용하면 DB에 갈 필요가 없으며) 속성을 변경하지 않고 NHibernate가 "재 저장"하는 이유는 무엇입니까?

+0

잘못된 값이라고 생각하지 않습니다. 나는 내가 저장하려고하는 객체가 Null 객체를 가지고 있다는 것이 단지 미친 짓이라고 생각한다. 사용자에게 제공하면 저장됩니다.이미로드 된 사용자가 있지만 새 설정 레코드를 삽입하고 기존 설정 레코드를 업데이트하지 않으므로 nhibernate가 아닌 나에게 설정 개체가 만들어 지므로로드 사용자가 없습니다. 내가 가서 사용자 개체에 설정 개체를 추가하고 저장할 수있을 것 같아요하지만이 방법에 대해 궁금 해서요. – chobo2

+0

@ chobo2 편집을 참조하십시오. –

+0

@ chobo2 "전체 개체 다시 저장"이란 무엇을 의미합니까? 실제 코드를 게시 할 수 있습니까? –

관련 문제