初めてFluent NHibernateとNHibernateを使うのが初めてです。私は自宅で書かれた約2000年以来、カスタム書面のマッパーを使用しました。約2年前にLinqToSQLに、エンティティに約6ヶ月前に切り替えました。流暢NHibernate?私はこれを正しくしていますか?
私はFluent/NHibernateが提供しなければならないものを見たいと思っています。しかし、私はそれが正しく動作するように見えることはできません。以下は私のクラス、その参照、ClassMapsのコピーです。この簡単な実装が正しいかどうか誰かに教えてもらえますか?
これは私のマッピングとオブジェクトクラス:
:
それはconfig.BuildSessionFactory(になるたび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>();
}
}
}
)それは次のようなエラーがスローされます。これは私のリポジトリである
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();
}
}
}
SessionFactoryの作成中に無効または不完全な設定が使用されました。
内側の例外は次のとおりです。
呼び出しのターゲットが例外をスローされました。
これは正しいアプローチですか?どんなアイデアや調整も大歓迎です!
私はあなたがユーザーのためのClassMapが欠けていると思います。 – Chandu
さて、これはうまく動作しています。しかし、私は実際にそれを使用して呼び出します:var allLogins = login.GetAllLogins()。ToList();次のエラーがスローされます。ファイルまたはアセンブリ 'NHibernate、Version = 2.1.2.4000、Culture = neutral、PublicKeyToken = aa95f207798dfdb4'またはその依存関係の1つを読み込めませんでした。見つかったアセンブリのマニフェスト定義がアセンブリ参照と一致しません。 NHibernate.Linqのようなソースですか? – Sean
Sean、NHibernate.Linqまたは他のNH依存ライブラリは、別のバージョンのNHに対してコンパイルされている可能性があります。この問題をweb.configに追加して解決しました。 \t \t \t \t \t \t \t \t \t \t \t dependentAssembly> \t assemblyBinding> –
AntonioR