ServiceStack OrmLite 文本斑点值被检索为 null
ServiceStack OrmLite Text blobbed value is retrieved as null
我们有一个使用 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/assembly。
现在有一个奇怪的行为。 Processor
已正确保存在 table 中。我还可以在集成测试中检索它们。但是,在生产代码中,当获取 OrderEntity
个对象的列表时,Processor
属性 在每个实例中都是 null。
我在调试器中深入研究了 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
版本:
- .NET 4.5.2
- ServiceStack 5.4.0
您可以尝试一些方法来解决无法加载 System.Runtime.CompilerServices.Unsafe
依赖项的运行时依赖项加载问题:
- 尝试手动添加对包的引用,或者如果它已经安装,请尝试 uninstalling/reinstalling。
- 尝试将
<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+也可以像这样解决加载运行时系统依赖。
我们有一个使用 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/assembly。
现在有一个奇怪的行为。 Processor
已正确保存在 table 中。我还可以在集成测试中检索它们。但是,在生产代码中,当获取 OrderEntity
个对象的列表时,Processor
属性 在每个实例中都是 null。
我在调试器中深入研究了 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
版本:
- .NET 4.5.2
- ServiceStack 5.4.0
您可以尝试一些方法来解决无法加载 System.Runtime.CompilerServices.Unsafe
依赖项的运行时依赖项加载问题:
- 尝试手动添加对包的引用,或者如果它已经安装,请尝试 uninstalling/reinstalling。
- 尝试将
<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+也可以像这样解决加载运行时系统依赖。