2010-11-22 61 views
4

我第一次使用NHibernate,但希望能够通过使用NHibernate Fluent避免配置文件如果可能的话。我有一个项目设置,我用下面NHibernate瓦特/流利 - 没有persister:[类]

[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")); 
} 

但是它吹起来的Get<T>()方法与抱怨那里是没有留存的错误尝试简单查询的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 2010-11-22 18:36:25

+0

也许我应该做同样的事情,并创建一个新的应用程序,并尝试复制我自己的错误,也许有些东西在我当前的项目中引用了什么?会导致错误吗? – 2010-11-22 22:12:05

回答

3

AddFromAssemblyOf中的程序集应该是映射类,而不是映射文件。地址是否与AddressMapping不同?尝试将其更改为AddFromAssemblyOf<YourNamespace.Address>