我是新来使用功能NHibernate和NHibernate的第一次。自从2000年开始,我使用了自定义的写入映射器。大约两年前,大约6个月前转换为LinqToSQL实体。流利的NHibernate?我是否正确地做这件事?
我想看看有什么流利/ NHibernate的必须提供。但是,我似乎无法让它正常运行。以下是我的课程,他们的参考,ClassMaps的副本。有人能告诉我这个简单的实现是否正确?
这是我的映射和对象类:
using System;
using FluentNHibernate.Mapping;
namespace MyData.Data.Mappings
{
public class Login
{
public virtual int LoginId { get; private set; }
public virtual string Username { get; set; }
public virtual User User { get; set; }
}
public class LoginClassMap : ClassMap<Login>
{
public LoginClassMap()
{
Table("Logins");
Id(d => d.LoginId).GeneratedBy.Guid();
Map(d => d.Username).Not.Nullable().Length(50);
HasOne(d => d.User).ForeignKey("UserId").Cascade.All();
}
}
public class User
{
public virtual Guid UserId{ get; private set; }
public virtual string FirstName { get; set; }
public virtual string LastName { get; set; }
public virtual Login Login { get; set; }
}
public class UserClassMap : ClassMap<User>
{
public UserClassMap()
{
Table("Users");
Id(d => d.UserId).GeneratedBy.Guid();
Map(d => d.FirstName).Not.Nullable().Length(100);
Map(d => d.LastName).Not.Nullable().Length(100);
References(r => r.Login, "UserId").Not.Nullable();
}
}
}
这是我的仓库:
using System;
using System.Linq;
using NHibernate;
using FluentNHibernate.Cfg;
using FluentNHibernate.Cfg.Db;
using NHibernate.Linq;
using MyData.Data.Mappings;
namespace MyData.Data.Repository
{
public class LoginRepository
{
private readonly ISessionFactory _sessionFactory;
ISession _session;
public LoginRepository()
{
_sessionFactory = this.CreateSessionFactory();
_session = _sessionFactory.OpenSession();
}
private ISessionFactory CreateSessionFactory()
{
string connString = "MyDataConnectionString";
FluentConfiguration config = Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005.ConnectionString(
x => x.FromConnectionStringWithKey(connString)))
.ExposeConfiguration(
c => c.SetProperty("current_session_context_class", "webContext"))
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<Login>());
return config.BuildSessionFactory();
}
public IQueryable<Login> GetAllLogins()
{
return _session.Linq<Login>();
}
}
}
一旦进入config.BuildSessionFactory()它抛出以下错误:
创建SessionFactory时使用了无效或不完整的配置。
的内部异常是:
异常已被调用的目标抛出。
这是解决这个正确的方法是什么?任何想法或调整将不胜感激!
我认为你缺少用户类映射。 – Chandu 2011-04-13 03:38:16
嗯,我运行得很好。但是,当我用实际叫它:VAR allLogins = login.GetAllLogins()ToList();它会抛出一个错误:无法加载文件或程序集'NHibernate,Version = 2.1.2.4000,Culture = neutral,PublicKeyToken = aa95f207798dfdb4'或其依赖项之一。定位的程序集清单定义与程序集引用不匹配。看起来像NHibernate.Linq是源? – Sean 2011-04-13 06:20:47
肖恩,NHibernate.Linq或其他NH依赖库可能已被编译为另一版本的NH。我们解决了这个问题加入这web.config中: \t \t \t \t \t \t \t \t \t \t \t dependentAssembly> \t assemblyBinding> –
AntonioR
2011-04-14 02:08:40