尝试在 C# 中将对象转换为字符串时,我确实遇到了堆栈溢出。我正在对端点进行 API 调用并将响应传递给此类。由于 ef 核心不支持数据类型“object”,我尝试将此数据类型转换为字符串,以将其作为列存储在数据库中。
我有一个具有各种属性的类,例如
public DateTime? start_date_local { get; set; }
public string? timezone { get; set; }
public double? utc_offset { get; set; }
其中一些来自对象类型:
[NotMapped]
public object? start_latlng { get; set; }
由于不支持此数据类型,因此我不会将其映射到数据库,但我尝试将其转换为字符串并将其存储在可以插入数据库的第二种数据类型中。
public string start_latlng2
{
get { return start_latlng2; }
set { start_latlng2 = Convert.ToString(start_latlng); }
}
这似乎不起作用,因为我总是收到如下错误:
Stack overflow.
Repeat 19126 times:
--------------------------------
at SportAnalytics.DataModel.Activity.get_start_latlng2()
--------------------------------
at DynamicClass.lambda_method171(System.Runtime.CompilerServices.Closure, Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry)
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry.EnsureOriginalValues()
at Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntrySubscriber.SnapshotAndSubscribe(Microsoft.EntityFrameworkCore.ChangeTracking.Internal.InternalEntityEntry)
我做错了什么吗?有没有更好的方法来实现我想要做的事情?
最佳答案
StackoverflowException 来自错误的属性定义。您应该用显式的后字段来编写它。
private string _start_latlng2;
public string start_latlng2
{
get { return _start_latlng2; }
set { _start_latlng2 = value; }
}
在您的情况下,您应该使用显式只读属性,该属性将在需要时调用:
public string start_latlng2
{
get { return start_latlng == null ? null : Convert.ToString(start_latlng); }
}
关于C# EF Core 将对象转换为字符串/get;放,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/74994116/