NHibernate,NHibernate.Linq和Fluent Mapping中的"没有持久性"错误

tuc*_*caz 7 nhibernate fluent-nhibernate linq-to-nhibernate

我使用Nhibernate 2.1.2.4000 GA与Nhibernate.Linq 1.0和最新版本的FluentNhibernate从github上的master下载.

我正在做一些测试,每当我尝试删除由linq查询检索的实体时,我收到此错误:

没有持久性:NHibernate.Linq.Query`1 [[Employees.Core.Entities.Employee,Employees.Core,Version = 1.0.0.0,Culture = neutral,PublicKeyToken = null]]

所有其他操作(插入,更新和选择)看起来很好;

我的实体类:

public class Employee
{
    public Employee()
    {
    }

    public virtual Int32 Id { get; private set; }
    public virtual String Name { get; set; }    

    public virtual String SayHello()
    {
        return String.Format("'Hello World!', said {0}.", Name);
    }
}
Run Code Online (Sandbox Code Playgroud)

映射类:

public class EmployeeMap : ClassMap<Employee>
{
    public EmployeeMap()
    {
        Id(x => x.Id);
        Map(x => x.Name)
            .Not.Nullable()
            .Length(50);
    }
}
Run Code Online (Sandbox Code Playgroud)

组态:

Assembly mappingsAssemly = Assembly.GetExecutingAssembly();

return Fluently.Configure()
    .Database( MsSqlConfiguration.MsSql2008
                    .ConnectionString(connectionString)
                    .ProxyFactoryFactory(typeof(ProxyFactoryFactory))
                    .ShowSql())                            
    .Mappings( m => m.FluentMappings.AddFromAssembly(mappingsAssemly))
    .BuildSessionFactory();
Run Code Online (Sandbox Code Playgroud)

并且代码不起作用:

public void RemoveAll()
{
    var q = from employee in _session.Linq<Employee>()
            select employee;

    foreach (var employee in q.ToList())
    {
        _session.Delete(q);
    }
}
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

tuc*_*caz 6

我们都错过了!

对不起,伙计们,谢谢你的帮助,但我只是想通了.

如果你注意RemoveAll()方法,你会看到我试图删除不是实体的"q"对象,而是IQueriable而不是传递"employee".这是缺乏关注.

正确的代码是:

        public void RemoveAll()
        {
            var q = from employee in _session.Linq()
                    select employee;

            var p = q.ToList();

            foreach (var employee in p)
            {
                _session.Delete(employee);
            }
        }