C# NHibernate映射异常。没有用于:NHibernateTesting.Account的持久化程序

C# NHibernate映射异常。没有用于:NHibernateTesting.Account的持久化程序,c#,.net,nhibernate,unit-of-work,C#,.net,Nhibernate,Unit Of Work,我只是想开始学习NHibernate,在用一个非常简单的POCO进行测试时,我已经遇到了一些问题。我得到了无持久性异常,我的代码如下所示: 科目表格: create table Account ( AccountID int primary key identity(1,1), AccountName varchar(10), CreateDate datetime ) go 科目类别: public class Account { public virtual

我只是想开始学习NHibernate,在用一个非常简单的POCO进行测试时,我已经遇到了一些问题。我得到了无持久性异常,我的代码如下所示:

科目
表格:

create table Account
(
    AccountID int primary key identity(1,1),
    AccountName varchar(10),
    CreateDate datetime
)
go
科目
类别:

public class Account
{
    public virtual int AccountID { get; set; }
    public virtual string AccountName { get; set; }
    public virtual DateTime CreateDate { get; set; }

    public Account()
    {
        AccountID = 0;
        AccountName = "";
        CreateDate = new DateTime();
    }
}
映射文件,
Account.hbm.xml
(是的,它嵌入到程序集中):


任何人都能看到我做错了什么或者为什么我会得到这个异常,我在网上读到这个问题与映射有关,但我看不出这个例子有什么错。

我已经复制了你所展示的所有映射和代码,它正在工作。除:

var newAccount = new Account(); // NEW
...
session.Update(newAccount); // Update throws exception:
NHibernate.StaleStateException:批更新返回意外的行 从更新开始计数;实际行数:0;预期:1

新对象必须通过以下方式保存:
session.Save(newAccount)

当您说映射文件被标记为嵌入式资源时。。。很难说到底出了什么问题。请仔细阅读此链接(并重新检查您的项目),并提供一个关于无持久性例外的非常好的体验链:


发生此错误是因为映射配置无效。您应该检查会话工厂的.Mappings设置位置。基本上在项目中搜索“.Mappings”(),并确保在下面的行中指定了正确的实体类

.Mappings(m => m.FluentMappings.AddFromAssemblyOf<YourEntityClassName>())
.Mappings(m=>m.FluentMappings.AddFromAssemblyOf())

我通过将我的列名更改为Id解决了这个错误。正如我第一次做的TemplateId一样,它显示了这个错误,但是当我将字段更改为Id时,它得到了解决。因此,nhibernate或Orchard要求将标识字段或主键设置为Id,可能是Hibernate会话配置不正确?能否提供NHibernateHelper的源代码?顺便说一句,无论何时创建新实例,都应该调用session.Save或session.SaveOrUpdate而不是session.Update。编译器没有提取映射文档时,项目本身一定出了问题,因为创建了另一个与project完全相同的控制台项目,在名称末尾添加了一个2(NHibernateTesting2),它工作得很好。使用VS2012?!是的,这是可能的,这些“不正确”很难找到。很高兴看到您成功地解决了它。
using (var session = NHibernateHelper.GetASession())
{
    using (var tran = session.BeginTransaction())
    {
        var newAccount = new Account();
        newAccount.AccountName = "some name";

        session.Update(newAccount); // Exception thrown here.

        tran.Commit();
    }
}
var newAccount = new Account(); // NEW
...
session.Update(newAccount); // Update throws exception:
.Mappings(m => m.FluentMappings.AddFromAssemblyOf<YourEntityClassName>())