1
내가이 삽입되지 대다 매핑 정의 (에만 관련 분야 포함)와 FluentNHibernate (v1.0.0.637) :은 다 대다 매핑 FluentNhibernate - 기록을 해결하는 것은
// MODEL:
public class User : IPersistentObject {
public User() {
Permissions = new HashedSet<Permission>();
}
public virtual int Id { get; protected set; }
public virtual ISet<Permission> Permissions { get; set; }
}
public class Permission : IPersistentObject {
public Permission() {
}
public virtual int Id { get; set; }
}
// MAPPING:
public class UserMap : ClassMap<User> {
public UserMap() {
Id(x => x.Id);
HasManyToMany(x => x.Permissions).Cascade.All().AsSet();
}
}
public class PermissionMap : ClassMap<Permission> {
public PermissionMap() {
Id(x => x.Id).GeneratedBy.Assigned();
Map(x => x.Description);
}
}
User_Permission 테이블에 삽입 된 레코드없기 때문에 다음 테스트는 실패
[Test]
public void AddingANewUserPrivilegeShouldSaveIt() {
var p1 = new Permission {
Id = 123,
Description = "p1"
};
Session.Save(p1);
var u = new User {
Email = "[email protected]"
};
u.Permissions.Add(p1);
Session.Save(u);
var userId = u.Id;
Session.Evict(u);
Session.Get<User>(userId).Permissions.Should().Not.Be.Empty();
}
실행되는 SQL은 (SQLite는)이다
INSERT INTO "Permission" (Description, Id) VALUES (@p0, @p1);@p0 = 'p1', @p1 = 1
INSERT INTO "User" (Email) VALUES (@p0); select last_insert_rowid();@p0 = '[email protected]'
SELECT user0_.Id as Id2_0_, user0_.Email as Email2_0_ FROM "User" user0_ WHERE [email protected];@p0 = 1
SELECT permission0_.UserId as UserId1_, permission0_.PermissionId as Permissi2_1_, permission1_.Id as Id4_0_, permission1_.Description as Descript2_4_0_ FROM User_Permissions permission0_ left outer join "Permission" permission1_ on permission0_.PermissionId=permission1_.Id WHERE [email protected];@p0 = 1
우리는 명확하게해야 User_Permissions
테이블에 삽입 된 기록가 없음을 알 수있다.
내가 뭘 잘못하고 조언을해야할지 확실하지 않습니다.
이 시험에 합격하시기 바랍니다..
감사합니다.
Dmitriy.
트랜잭션에서 코드를 래핑 해 보았습니까? – miensol