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.

+0

트랜잭션에서 코드를 래핑 해 보았습니까? – miensol

답변

0

miensol이 의견에서 말했듯이, 나는 거래를 저지르는 것을 잊었다.

관련 문제