在阅读了一些关于Fluent NHibernate的文章后,我对从哪里开始感到困惑
我有一个现有的数据库,我需要创建DataAccessLayer。我是NHibernate和FluentNhibernate的新手。由于我理解不需要编写hbm.xml文件,因此我选择了Fluent Nhibernate。
那么,什么是FluentMapping?和AutoMapping?
我创建了一个名为FirstProject.Entities
的classLibraryProject我创建了一个名为“Customer”的类
namespace FirstProject.Entities
{
public class Customer
{
public virtual int CustomerID { get; set; }
public virtual string CustomerName { get; set; }
public virtual string Address1 { get; set; }
public virtual string Address2 { get; set; }
public virtual string City { get; set; }
public virtual string State { get; set; }
public virtual int Zip { get; set; }
}
}
然后我创建了一个Mapping类
namespace FirstProject.Entities
{
public class CusotmerMap : ClassMap<Customer>
{
public CustomerMap()
{
Id(x => x.CustomerID).Column("CustomerID").GeneratedBy.Assigned();
Map(x => x.CustomerName);
Map(x => x.Address1);
Map(x => x.Address2);
Map(x => x.City);
Map(x => x.Zip);
}
}
}
我现在不知道如何继续前进。我做得对吗?请建议
如何配置和继续进行
答案 0 :(得分:1)
以下是Fluent
Id(x => x.CustomerID).Column("CustomerID").GeneratedBy.Assigned();
我使用Fluent断言,如下所示
actual.Should().BeGreaterThan(1).And().LessThan(2);
Fluent基本上是将命令链接在一起的位置,使其读取得非常好。
自动映射是您什么都不做的地方。一切都是通过惯例完成的。我倾向于使用Auto。如果你不遵守惯例,流利是很好的。
根据您的映射,被分配的CustomerId不是开箱即用的约定。因此,你需要
如果你想做选项3,这里是代码:
var model = AutoMap
.AssemblyOf<Customer>()
.Where(IsMapped)
.Override<Customer>(a => a.Id(b => b.CustomerId, "CustomerId").GeneratedBy.Assigned());
对于要映射的实体,函数IsMapped必须返回True。