C#学习教程:Nhibernate映射内部类和InternalsVisibleTo分享


Nhibernate映射内部类和InternalsVisibleTo

我的代理生成器无法为内部映射的Nhibernate类生成代理。 我尝试在assemblyinfo.cs中使用InternalsVisibleTo将它们添加为可见但它似乎不起作用。 更糟糕的是,我不知道如何判断我是否已成功设法成为我想要的代理程序集的朋友,因为如果我在assemblyinfo.cs中的代理程序集公钥中更改了一些数字,则不会抛出任何错误。

错误:

测试方法TestProject1.UnitTest1.TestMethod1抛出exception:NHibernate.HibernateException:创建代理实例失败—> Castle.DynamicProxy.Generators.GeneratorException:Type不公开,因此无法生成代理。 键入:BaseSystemCore.Domain.Lot

堆栈跟踪:

Castle.DynamicProxy.DefaultProxyBuilder.AssertValidType(Type target)Castle.DynamicProxy.DefaultProxyBuilder.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options)Castle.DynamicProxy.ProxyGenerator.CreateClassProxy(Type classToProxy,Type [] additionalInterfacesToProxy,ProxyGenerationOptions options,Object [] constructorArguments,IInterceptor []拦截器)NHibernate.ByteCode.Castle.ProxyFactory.GetProxy(Object id,ISessionImplementor session)NHibernateUtilities.BaseUnitOfWork.handleException(例外e)在C: Users Isaac.G Desktop svn.bolinger中。 ca Library Projects NHibernateUtilities NHibernateUtilities BaseUnitOfWork.cs:第871行NHibernateUtilities.BaseUnitOfWork.getAllT在C: Users Isaac.G Desktop svn.bolinger.ca Library Projects NHibernateUtilities NHibernateUtilities BaseUnitOfWork.cs:line 115 C: Users Isaac.G Desktop svn.bolinger.ca Library Projects BaseSystemCore TestProject1 UnitTest中的TestProject1.UnitTest1.TestMethod1() 1.cs:第71行

有没有人以前有这个工作?

谢谢

艾萨克

NHibernate 3.2内置了代理提供程序。 我简要地看看它们的来源似乎使用了这种格式:{0} ProxyAssembly。 其中{0}是延迟映射类的类型名称。 我没有测试过它。 尝试将以下内容添加到AssemblyInfo.cs并将{0}替换为您的惰性类名:

[assembly: InternalsVisibleTo("{0}ProxyAssembly")] 

如果您仍想使用旧版本的NHibernate,可以尝试使用它(对于城堡字节代码提供程序):

 [assembly: InternalsVisibleTo("DynamicProxyGenAssembly2")] 

DynamicProxyGenAssembly2是一个由Castle动态生成的临时程序集。 它包含从映射类(代理)派生的类。

值得一提的是,这就是我投入T4的原因。 它会自动为我的实体生成所有InternalsVisibleTo属性。 希望能帮助到你。

上述就是C#学习教程:Nhibernate映射内部类和InternalsVisibleTo分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—猴子技术宅(www.ssfiction.com)

 <#@ template debug="false" hostspecific="false" language="C#" #> <#@ assembly name="System.Core" #> <#@ assembly name="$(SolutionDir)DomainbinDebugDomain.dll" #> <#@ import namespace="System.Linq" #> <#@ output extension=".cs" #> using System.Runtime.CompilerServices; <# var publicType = typeof(Domain.Foo); var allTypes = publicType.Assembly.GetTypes(); var entityType = allTypes.Single(t => t.FullName == "Domain.Entities.Entity"); // my entity supertype foreach(var type in allTypes.Where(t => !t.IsAbstract && entityType.IsAssignableFrom(t))) {#> [assembly: InternalsVisibleTo("<#= type.Name #>ProxyAssembly")] <#}#> 

本文来自网络收集,不代表猴子技术宅立场,如涉及侵权请点击右边联系管理员删除。

如若转载,请注明出处:https://www.ssfiction.com/ckf/959909.html

发表评论

邮箱地址不会被公开。 必填项已用*标注