cuốn sách gpt4 ai đã làm

c# - NHibernate.Mapping 异常。 Namespace.className 没有持久性

In lại Tác giả: Walker 123 更新时间:2023-11-29 01:55:17 26 4
mua khóa gpt4 Nike

查看了 4 个关于同一问题的 stackoverflow 帖子,但找不到解决方案。

我的主程序:

using System;
using System.IO;
using System.Collections.Generic;
using System.Collections;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using NHibernate;
using NHibernate.Cfg;
using NHibernate.Cfg.MappingSchema;
using NHibernate.Dialect;

namespace NhibernateORM
{
public class Layout
{
public int Id { get; set; }
public string Name { get; set; }
public double xCoordinate { get; set; }
public double yCoordinate { get; set; }
}
class Program
{
private static int getDummyTableSize(ISession session)
{
ITransaction readTx = session.BeginTransaction();
int size = session.CreateSQLQuery(@"select * from mydb.mytable").List().Count;
readTx.Rollback();
return size;
}

static void Main(string[] args)
{
Configuration config = new Configuration();
config.Configure(Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "hibernate.cfg.xml"));

ISessionFactory factory = config.BuildSessionFactory();
ISession session = factory.OpenSession();

int countBefore = getDummyTableSize(session);

ITransaction tx = session.BeginTransaction();
Layout d = new Layout();
d.Id = 213;
d.Name = "hello";
d.xCoordinate = 25.823;
d.yCoordinate = 746.2;

// POINT OF ERROR
session.Save(d);
tx.Commit();

if (countBefore + 1 == getDummyTableSize(session))
{
Console.WriteLine("woo hoo");
}
khác
{
Console.WriteLine("oh no");
}
session.Close();
}
}
}

我的hibernate.cfg.xml(配置文件):





NHibernate.Connection.DriverConnectionProvider


NHibernate.Driver.MySqlDataDriver


Server=localhost;Database=mydb;User="root";


NHibernate.Dialect.MySQL5Dialect






和我的Mapping.hbm.xml 文件:







type="String">

type="double">

type="double">


我尝试了以下方法:

  1. 将映射文件(Mapping.hbm.xml) 的构建操作设置为嵌入式资源并将配置文件(hibernate.cfg.xml) 的构建操作设置为嵌入式资源和内容。同时将复制到输出目录设置为始终复制。

  2. 将 hibernate-mapping 标签中的自动导入设置为 true 和 false

  3. hiện hữuhibernate.cfg.xml中添加mapping assembly标签,同时检查命名空间和程序集名称。

  4. hiện hữu hibernate.cfg.xml 文件中添加一个映射资源标签,该文件给出了模糊映射标签的错误。

我还能尝试什么?错误发生在 session.save() 行之前,并且查询在 session.save 上面的表中检索行数工作正常。

另外,以下是完整的错误信息:

NHibernate.MappingException was unhandled
HResult=-2146232832
Message=No persister for: NhibernateORM.Layout
Source=NHibernate
StackTrace:
at NHibernate.Impl.SessionFactoryImpl.GetEntityPersister(String entityName)
at NHibernate.Impl.SessionImpl.GetEntityPersister(String entityName, Object obj)
at NHibernate.Event.Default.AbstractSaveEventListener.SaveWithGeneratedId(Object entity, String entityName, Object anything, IEventSource source, Boolean requiresImmediateIdAccess)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.SaveWithGeneratedOrRequestedId(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.EntityIsTransient(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveEventListener.PerformSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Event.Default.DefaultSaveOrUpdateEventListener.OnSaveOrUpdate(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.FireSave(SaveOrUpdateEvent event)
at NHibernate.Impl.SessionImpl.Save(Object obj)
at NhibernateORM.Program.Main(String[] args) in d:\codebase\NhibernateORM\NhibernateORM\Program.cs:line 57
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:

câu trả lời hay nhất

我会说,因为所有这些信息,我们应该有一个罪魁祸首。 映射C#代码存在很多问题(事实上câu hỏi),我们确信知道:

the Mapping.hbm.xml is not correctly configured, not used, not visible for NHibernate

如果这个文件Như là对 NHibernate session 工厂可用,我们会得到这个异常

System.TypeInitializationException: The type initializer for 'Instance' threw an exception. ---> NHibernate.MappingException: Could not compile the mapping document: NhibernateORM.Mapping.hbm.xml ---> NHibernate.MappingException: persistent class Layout, NhibernateORM not found ---> System.TypeLoadException: Could not load type 'Layout' from assembly 'NhibernateORM...

可以通过将命名空间属性添加到映射 namespace="NhibernateORM"

来解决这个问题


assembly="NhibernateORM"
namespace="NhibernateORM"
auto-import="true">







一旦这个问题得到修复,我们稍后就会得到这个异常

NHibernate.InvalidProxyTypeException: The following types may not be used as proxies: NhibernateORM.Layout: method get_Id should be 'public/protected virtual' or 'protected internal virtual'...

这可以通过将所有实体的东西虚拟化来解决:

namespace NhibernateORM
{
public class Layout
{
public virtual int Id { get; set; }
public virtual string Name { get; set; }
public virtual double xCoordinate { get; set; }
public virtual double yCoordinate { get; set; }

所以,我们肯定知道 - 问题是

  • hibernate.cfg.xml 中的错误配置
  • Mapping.hbm.xml 属性配置错误

这应该是 hibernate.cfg.xml 的一部分:




...

hibernate.cfg.xml 必须具有属性:

  • 构建操作 === 内容
  • 复制到输出目录 === 总是复制

Mapping.hbm.xml 必须具有属性:

  • 构建操作 === 嵌入式资源
  • 复制到输出目录===不要复制

关于c# - NHibernate.Mapping 异常。 Namespace.className 没有持久性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30788147/

26 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress