EF:将类属性映射到行而不是列

mdz*_*ieg 5 c# orm entity-framework

您知道如何将类的属性映射到表中的行吗?让我们有一个表 [ID, KEY, VALUE]。

我希望在类中具有预定义的键值(例如属性)映射属性,其值取自值列。

例子:

桌子

 ---------------------------------
| ID  | Key        | Value        |
 ---------------------------------
| 1   | Name       | Jon          |
 ---------------------------------
| 2   | Surname    | Doe          |
 ---------------------------------
Run Code Online (Sandbox Code Playgroud)

班级

public class Bar
{
    public string Name { get; set; }
    public string Suname { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

EF 中有什么东西可以实现这一点,还是我必须编写自己的自定义代码?

BR

Ser*_*kiy 2

您无法将值从列映射到属性。这样你就有了键值表,那么我建议你将表内容读入字典。

首先,您应该拥有具有与表列名称相对应的属性的实体:

public class Foo
{
   public string Key { get; set; }
   public string Value { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

将此实体映射到表后,您可以将所有表内容读入字典中:

var values = context.Foos.ToDictionary(f => f.Key, f => f.Value);
Run Code Online (Sandbox Code Playgroud)

现在您可以轻松地通过键获取值:

var name = values["Name"];
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用此字典作为您的属性的后备存储:

public void Bar
{
    private Dictionary<string, string> values = 
         context.Foos.ToDictionary(f => f.Key, f => f.Value);

    public string Name { get { return values["Name"]; } }
    public string Surname { get { return values["Surname"]; } }
}
Run Code Online (Sandbox Code Playgroud)