我正在尝试直接从数据库设置属性值,以便可以启动新对象
Object AllValues = new Object();
并以AllValues.MediumRunTime;
这样的代码进行访问
使用Entity Framework,并返回不应该返回的0。
ReSharper也会发出Field value is never assigned
警告
我的表是Values{name, value, units}
,其中包含约100条记录。
这是我的AllValues类
using System.Linq;
namespace RunTimes
{
public class AllValues
{
private long value;
public long ShortRunTime
{
get => value;
set
{
using (var data = new ModelData())
{
var prop = data.Values.FirstOrDefault(c => c.name == "ShortRunTime");
value = prop.value;
}
}
}
public long MediumRunTime
{
get => value;
set
{
using (var data = new ModelData())
{
var prop = data.Values.FirstOrDefault(c => c.name == "MediumRunTime");
value = prop.value;
}
}
}
...
我试图像这样
在Program.cs上访问它AllValues av = new AllValues();
Console.WriteLine($"Medium run time: {av.MediumRunTime}");
答案 0 :(得分:0)
“属性设置器”不是“用数据库中的值设置字段”的地方,您可以在从数据库中首次加载属性后使用它来设置属性的值。
因此,您将拥有一个包含一些简单属性的类,而不是当前的AllValues类,例如:
class AllValues
{
public string ShortRunTime { get; set; }
public string MediumRunTime { get; set; }
// ...
}
然后像这样实例化它:
var av = new AllValues();
using (var data = new ModelData())
{
av.ShortRunTime = data.Values.FirstOrDefault(c => c.name == "ShortRunTime")?.Value;
av.MediumRunTime = data.Values.FirstOrDefault(c => c.name == "MediumRunTime")?.Value;
// ...
}
此后,您可以在内存中使用您的课程。 “技巧”是将关注点分开:您的“转换后的类”(AllValues
)和从数据库加载数据是两个不同的关注点,应分别处理。