我们有一个使用ServiceStack OrmLite进行数据库访问的小型应用程序。我目前正在调查以前可以使用的损坏功能。
有两个相关实体:
[Alias("MyOrder")]
public class OrderEntity
{
[AutoIncrement]
public int Id { get; set; }
...
// Saved as JSV blob in the table
public AppEntity Processor { get; set; }
}
[Alias("MyApp")]
public class AppEntity
{
[AutoIncrement]
public int Id { get; set; }
...
[StringLength(64)]
public string UserName { get; set; }
public Guid? InternalUserId { get; set; }
}
不确定是否重要,但是AppEntity
位于另一个DLL /程序集中。
现在有一种奇怪的行为。 Processor
个已正确保存在表中。我也可以在集成测试中检索它们。但是,在生产代码中,当获取OrderEntity
个对象的列表时,每个实例的Processor
属性都为空。
我在调试器中深入研究了ServiceStack代码,发现最初正确地获取了JSV字符串,但似乎在途中迷路了。
这是有效的单元测试:
var connectionString = @"Server=...";
var connectionFactory = new OrmLiteConnectionFactory(connectionString, new SqlServerOrmLiteDialectProvider());
var orderRepository = new OrderRepository(connectionFactory);
var orders = orderRepository.FindBySomeFilter();
// entries have not-null .Processor property
这是一个不起作用的小型应用程序:
var connectionString = @"Server=...";
var connectionFactory = new OrmLiteConnectionFactory(connectionString, new SqlServerOrmLiteDialectProvider());
var orderRepository = new OrderRepository(connectionFactory);
var orders = orderRepository.FindBySomeFilter();
// .Processor is not retrieved / null for all entries
版本:
答案 0 :(得分:1)
您可以尝试解决无法加载System.Runtime.CompilerServices.Unsafe
依赖项的此类运行时依赖项加载问题:
<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
添加到您的项目中由于这是一个.NET Framework项目,因此您可以尝试添加绑定重定向:
<dependentAssembly>
<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>
或者如果您已经为此配置了绑定重定向,请尝试将其删除。
否则,升级到最新的.NET Framework v4.7 + 也可以解决加载此类运行时系统的问题。