Я искал для решения как можно лучше, но, похоже, я где-то в недоумении. Это мое первое погружение в Fluent NHibernate & NHibernate.Нужна помощь с сопоставлениями Hibernate с NFLuent
Короткий вариант (который все еще будет длинным) заключается в том, что у меня есть база данных с таблицами User, Role, UserRoles. Связь b/t их должна быть достаточно интуитивной ... Пользователю может быть назначено несколько ролей. В таблице UserRoles хранятся эти ассоциации, поэтому User & Роль не связывает напрямую. Мне кажется, мне нужно отношение «ко многим ко многим», но я не уверен, как сопоставить это в NFLuent.
Я сделал пример на странице начала работы с NFLuent и заработал. Я попытался догадаться об ответах, но я кое-что упустил.
Я перечислю моему Entity & отображения во втором, но ошибка, я получаю:
недопустимый или неполной конфигурации был использован при создании SessionFactory. Для получения более подробной информации просмотрите коллекцию PotentialReasons и InnerException.
Коллекция Потенциальные причины ничего, кроме InnerException не говорят, говорит:
{ "Не удалось определить тип для: DataAccess.Entities.User, DataAccess, Version = 1.0.0.0, Culture = нейтральный, PublicKeyToken = NULL для столбцов: NHibernate.Mapping.Column (Пользователь) "}
НВМ файл Вот мои объекты:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataAccess.Entities
{
public class User
{
public virtual int Id { get; private set; }
public virtual string DisplayName { get; set; }
public virtual string Email { get; set; }
public virtual string Password { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataAccess.Entities
{
public class Role
{
public virtual int Id { get; private set; }
public virtual string RoleName { get; set; }
public virtual string RoleDescription { get; set; }
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataAccess.Entities
{
public class UserRole
{
public virtual int Id { get; private set; }
public virtual Role Role { get; set; }
public virtual User User { get; set; }
//Attempted variations
//public virtual IList<Role> Roles{ get; set; }
//public virtual IList<User> Users { get; set; }
//public UserRole()
//{
// Roles = new List<Role>();
// Users = new List<User>();
//}
//public virtual void AddRole(Role role)
//{
// Roles.Add(role);
//}
//public virtual void AddUser(User user)
//{
// Users.Add(user);
//}
}
}
Вот мои отображения:
using DataAccess.Entities;
using FluentNHibernate.Mapping;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace DataAccess.Mappings
{
public class RoleMap : ClassMap<Role>
{
public RoleMap()
{
Id(x => x.Id);
Map(x => x.RoleDescription);
Map(x => x.RoleName);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccess.Entities;
using FluentNHibernate.Mapping;
namespace DataAccess.Mappings
{
public class UserMap : ClassMap<User>
{
public UserMap()
{
Id(x => x.Id);
Map(x => x.DisplayName);
Map(x => x.Email);
Map(x => x.Password);
}
}
}
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DataAccess.Entities;
using FluentNHibernate.Mapping;
namespace DataAccess.Mappings
{
public class UserRoleMap : ClassMap<UserRole>
{
public UserRoleMap()
{
Id(x => x.Id);
Map(x => x.User);
Map(x => x.Role);
//HasMany(x => x.Users)
// .Inverse()
// .Cascade.All();
//HasMany(x => x.Roles)
// .Inverse()
// .Cascade.All();
}
}
}
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database(MsSqlConfiguration.MsSql2005
.ConnectionString(c => c
.Server(@".\SQLEXPRESS")
.Database("MyDB")
.TrustedConnection())
)
.Mappings(m => m
.FluentMappings.AddFromAssembly(Assembly.GetExecutingAssembly())
.ExportTo(@"C:\Development\MVC\DataAccess\hbms"))
.ExposeConfiguration((Configuration config) => new SchemaExport(config).Create(false, true))
.BuildSessionFactory();
}
Любые предложения будут оценены. Благодаря!
Я могу разместить свои HBM файлы, если это необходимо. – jason