我正在尝试使用FluentNHibernate和Sql2005进行最简单的映射.基本上,我有一个名为"sv_Categories"的数据库表.我想添加一个类别,自动设置ID,并添加提供的用户ID和标题.
数据库表格布局:
简单.
My SessionFactory code (which works, as far as I can tell):
_SessionFactory = Fluently.Configure().Database(
MsSqlConfiguration.MsSql2005
.ConnectionString(c => c.FromConnectionStringWithKey("SVTest")))
.Mappings(x => x.FluentMappings.AddFromAssemblyOf<CategoryMap>())
.BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)
我的ClassMap代码:
public class CategoryMap : ClassMap<Category>
{
public CategoryMap()
{
Id(x => x.ID).Column("CategoryID").Unique();
Map(x => x.Title).Column("Title").Not.Nullable();
Map(x => x.UserID).Column("UserID").Not.Nullable();
}
}
Run Code Online (Sandbox Code Playgroud)
我的班级代码:
public class Category
{
public virtual int ID { get; private set; }
public virtual string Title …Run Code Online (Sandbox Code Playgroud) 我有以下实体
public class Employee
{
public virtual int Id {get;set;}
public virtual ISet<Hour> XboxBreakHours{get;set}
public virtual ISet<Hour> CoffeeBreakHours {get;set}
}
public class Hour
{
public DateTime Time {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
(我想在这里做的是员工A每天播放Xbox的商店信息,比如9:00 13:30,每天7:00 12:30 18:00喝咖啡休息时间) - 我不确定我的方法这里有效.
问题是我的(理想上流畅的)映射应该如何?对于Hour类来说,没有必要(从我的角度来看)具有Id或可以从某种存储库访问.
我正在尝试将两个域实体映射到同一个表.我们正在为我们的域模型做一个智能实体,所以我们有一个可编辑地址和一个只读地址的概念.我已经使用Classmaps进行了映射,在我们尝试使用NHibernate中的SchemaExport类导出模式之前,一切似乎都很顺利.它错误地说该表已经存在.
我认为这很简单,我只是没有看到.
有任何想法吗?
谢谢
更新
还有一些我未提及的其他事情.我对迄今为止回答的人表示赞赏,但他们并不适合我们.
一个是我们有一个地址表,不包括任何具有地址的实体中的列.
另一个是我们不能使用通用基类.对于可编辑对象,我们有一个超类,它将验证行为添加到子类中.readonly对象虽然不需要这种行为,但不应该有这些行为.
我已经考虑了一个接口,但后来我相信我最终会陷入困境,你可以在这个接口上投射一个只读对象,然后改变它的值(因为大概NHibernate会使用所说的接口来水合对象).
因此,如果有另一种方法来实现这一点,或者如果通过接口进行映射不会出现我所描述的问题,请告诉我.我还在学习NHibernate.
再次感谢!
我在http://wiki.fluentnhibernate.org/Getting_started上完成了Fluent NHibernate教程,项目编译得很好.
但是,我收到运行时错误,我似乎无法解决它.您可以在教程中看到的CreateSessionFactory方法中发生错误.这里是:
private static ISessionFactory CreateSessionFactory()
{
return Fluently.Configure()
.Database
(
SQLiteConfiguration.Standard
.UsingFile(DbFile)
)
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<FluentNHibernateSample.Program>())
.ExposeConfiguration(BuildSchema)
.BuildSessionFactory();
}
Run Code Online (Sandbox Code Playgroud)
我认为最有帮助的事情是给你从最外层异常到最内层异常的异常链(这是一个真正的单词):
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
An invalid or incomplete configuration was used while creating a SessionFactory. Check PotentialReasons collection, and InnerException for more detail.
Could not compile the mapping document: (XmlDocument)
persistent class FluentNHibernateSample.Entities.Employee, FluentNHibernate, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null not found
Could not …Run Code Online (Sandbox Code Playgroud) c# nhibernate visual-studio-2010 fluent-nhibernate assembly-resolution
我正在尝试使用ASP.NET MVC正确配置Fluent和NHibernate。据我所知,它的配置正确,但是当我访问使用该设置的页面时,没有收到任何数据结果。
我使用的模型称为Brand,数据库表为Brands。
这是我的BrandController的片段:
public ActionResult Index()
{
IRepository<Brand> repo = new BrandRepository();
var brands = repo.GetAll().ToList<Brand>();
return View(brands);
}
Run Code Online (Sandbox Code Playgroud)
这是我的BrandRepository中的摘录:
ICollection<Brand> IRepository<Brand>.GetAll()
{
using (ISession session = NHibernateHelper.OpenSession())
{
var brands = session
.CreateCriteria(typeof(Brand))
.List<Brand>();
return brands;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的NHibernateHelper:
public class NHibernateHelper
{
private static ISessionFactory _sessionFactory;
private static ISessionFactory SessionFactory
{
get
{
if (_sessionFactory == null)
{
_sessionFactory = Fluently.Configure()
.Database(
MsSqlConfiguration.MsSql2008
.ConnectionString(c => c
.FromConnectionStringWithKey("ShoesFullAccess")
)
)
.BuildSessionFactory();
}
return _sessionFactory; …Run Code Online (Sandbox Code Playgroud) 我的应用程序具有以下实体:
public class User
{
public virtual int UserID { get; set; }
public virtual string UserName { get; set; }
public virtual IList<UserLog> Log { get; private set; }
public User()
{
Log = new List<UserLog>();
}
}
public class UserLog
{
public virtual int UserLogID { get; set; }
public virtual User User { get; set; }
public virtual string UserName { get; set; }
public virtual DateTime DateCreated { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
使用以下流畅的映射:
public class UserMap …Run Code Online (Sandbox Code Playgroud) 当删除nhibernate中的实体时,我得到一个带有此错误消息的异常:
delete语句与列引用约束冲突..
当然,异常包含在很长的异常系列中.
错误消息是正常的,但我可以让nhibernate向用户显示更多礼貌的错误消息吗?
换句话说:
是否有任何约定,我可以自定义异常?
我正在使用Oracle 11g数据库.
有没有人知道任何有关如何为SQL Server 2005/2008配置FluentNhibernate的好教程.我发现的那些通常只使用SQLite,但我希望看到一个专门针对SQL Server 2005/2008.
我非常喜欢FluentNhibernate网站上的示例教程(http://wiki.fluentnhibernate.org/Getting_started#Your_first_project),但看起来我发现的大多数教程似乎只处理SQLite.很高兴看到一个工作教程,处理SQL Server 2005/2008,MySQL等真实世界应用程序中更常见的数据库,谢谢!
我有2个主表,它们通过地图表链接如下
User [UserId,Name]
Resource [ResourceId,Name]
UserResourceMap [UserId,ResourceId,AccessLevel]
Run Code Online (Sandbox Code Playgroud)
具有AccessLevel的Resource和User ClassMap如何作为资源属性?
我的Domain类看起来像这样
public class User
{
public virtual int UserId { get;protected set; }
public virtual string Name { get;set; }
}
public class Resource
{
public virtual int ResourceId { get;protected set; }
public virtual string Name { get;set; }
public virtual string AccessLevel { get;set; }//Issue-populate this using fluent
}
Run Code Online (Sandbox Code Playgroud)
如何在下面的代码中使用fluent映射accessLevel属性.
public class UserMap : ClassMap<User>
{
public UserMap()
{
Table("User");
Id(x => x.Key);
Map(x=>x.Name);
}
}
public class ResourceMap …Run Code Online (Sandbox Code Playgroud) 在流利的NH中有任何方式可以将[查看]映射到c#类吗?我需要让它们只读.