2010-11-22 4 views
4

NHibernate Fluent를 사용하여 NHibernate를 처음 사용하고 있지만 가능하다면 설정 파일을 피할 수 있기를 원했습니다. 나는 프로젝트 설정을 가지고와 나는 오류가 더 persister 존재하지 불평과 Get<T>() 방법에 위로 불고 그러나 다음NHibernate w/Fluent - No persister for : [class]

[TestMethod] 
public void TestMethod1() 
{ 
    var cfg = Fluently.Configure() 
     .Database(MsSqlConfiguration.MsSql2008.ConnectionString(c => c.Is("[ConnectionStringHere"))) 
     .Mappings(m => m.FluentMappings.AddFromAssemblyOf<RedSand.Models.Data.Mapping.AddressMapping>()); 

    var sessionFactory = cfg.BuildSessionFactory(); 

    var session = sessionFactory.OpenSession(); 

    session.Get<Address>(new Guid("A8B9BA39-425D-4AE6-A72E-00216ABC87C4")); 
} 

를 사용하여 ADRESS 개체에 대해 간단하게 노력 쿼리하고있다. 내 주소 클래스는 아래와 같습니다.

public class Address 
{ 
    public Guid AddressId { get; set; } 
    public string AddressType { get; set; } 
    public string StreetAddress { get; set; } 
    public Guid CityId { get; set; } 
    public string PostalCode { get; set; } 
    public bool DefaultAddress { get; set; } 
    public bool TermAddress { get; set; } 
    public string SuiteNumber { get; set; } 
    public float Latitude { get; set; } 
    public float Longitude { get; set; } 
    public int Accuracy { get; set; } 
} 

public class AddressMapping : ClassMap<Address> 
{ 
    public AddressMapping() 
    { 
     Table("tblAddress"); 
     Not.LazyLoad(); 
     Id(a => a.AddressId).Column("AddressID").GeneratedBy.Guid(); 
     Map(a => a.StreetAddress).Column("Address").Length(100); 
     Map(a => a.CityId).Column("CityID"); 
     Map(a => a.PostalCode).Length(50); 
     Map(a => a.DefaultAddress); 
     Map(a => a.TermAddress).Default("0"); 
     Map(a => a.SuiteNumber).Column("SuiteNo").Length(50); 
     Map(a => a.Latitude); 
     Map(a => a.Longitude); 
     Map(a => a.Accuracy); 
    } 
} 

기존 데이터베이스를 사용하고 있으므로 펑키 한 테이블 구조/이름 지정을 무시하십시오.

여기에 뭔가가 있습니까? 아무도 너를 보지 못했다고 불평하는 이유를 설명하는 것을 볼 수 있습니까?

+0

복제하려고 시도했지만 실패 할 수는 없습니다. 두 개의 별도 "주소"클래스가 정의되어 있지 않습니까? – mxmissile

+0

어쩌면 내가했던 것과 똑같은 일을하고 새로운 애플리케이션을 만들어서 내 자신의 오류를 복제하려고 시도 했는지도 모른다. 어쩌면 현재 프로젝트에서 참조 나 다른 것이 섞여있을 수도있다. 오류가 발생 했습니까? –

답변

3

AddFromAssemblyOf의 어셈블리는 매핑 파일이 아니라 매핑 된 클래스 여야합니다. AddressMapping과 다른 어셈블리에있는 Address입니까? 이를 AddFromAssemblyOf<YourNamespace.Address>으로 변경하십시오.

+0

'Address' 클래스의 네임 스페이스는'AddFromAssemblyOf () '호출에서 이미 완전히 해결되었으므로 네임 스페이스를 확인하는 것이 문제가되지 않습니다. 이전에는 전체 어셈블리를 추가했지만 복잡성을 제거하기 위해 하나의 'Address' 클래스로 축소했습니다. 이 테스트에 사용하는 코드는 별도의 프로젝트에 있습니다. 예, MVC 응용 프로그램에서 만든 테스트 프로젝트입니다. 그러나 MVC 응용 프로그램에서 동일한 오류가 발생한 후에 만 ​​테스트 프로젝트로 이동했습니다. –

+0

쓰레기! 방금 네가 의미하는 바를 알아 냈어. 'AddFromAssemblyOf ()'을 호출하는 것이 아니라'Get ()'메소드에서 완전히 해결할 수 있습니다. 내가 알지 못했던 또 다른 레퍼런스에 정의 된 Address 클래스가 있었음을 알았습니다.이 클래스는 내가이 프로젝트에서 만든 클래스 대신에 기본값으로 설정되어있었습니다. 나는 이런 작은 버그를 싫어한다. 때로는 그것을 분류하기 위해 눈의 두 번째 세트가 필요할 때도있다. –

+0

실제로 나는'AddFromAssemblyOf '메소드를 의미했습니다. 그러나 나는 그것이 당신을 올바른 방향으로 가리키게되어 기쁘다. –

관련 문제