从数据库中设置 属性 值

Set property value from database

我正在尝试直接从数据库设置 属性 值,以便我可以启动新对象
Object AllValues = new Object(); 并在这样的代码中访问它 AllValues.MediumRunTime; 使用 Entity Framework 并且它返回了它不应该返回的 0。
ReSharper 也抛出 Field value is never assigned 警告

我的 table 是 Values{name, value, units} 并且包含大约 100 条记录。

这是我的 AllValues class

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}");

A 属性 setter 不是 'set a field with the value from the database' 的地方,你在第一次从数据库加载它之后用它来设置 属性 的值。

因此,您将拥有一个具有一些简单属性的 class,而不是当前的 AllValues class,例如:

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;
     // ...
}

在此之后,您可以使用内存中的 class。 'trick' 是为了区分关注点:您的 'transformed class' (AllValues) 和从数据库加载数据是两个不同的关注点,应该分开处理。