从数据库设置属性值

时间:2018-08-13 07:24:46

标签: c# database entity-framework resharper

我正在尝试直接从数据库设置属性值,以便可以启动新对象
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}");

1 个答案:

答案 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)和从数据库加载数据是两个不同的关注点,应分别处理。