如何定义在数据库中与代码中存储方式不同的属性?

问题描述 投票:0回答:1

我有一个模型的字段/属性需要存储为字符串。但是,它将采用分隔格式,因此在代码中,我希望能够

get
set
将其作为可枚举。我正在使用 EFCore 使用此类创建代码优先迁移,因此我认为该属性需要公开。目前,我有这个:

public class DropdownOptions
{
    public string Options { get; set; } = "";

    public string[] GetOptions() => Options.Split('|');

    public void SetOptions(IEnumerable<string> options) => Options = string.Join('|', options);
}

这样做的麻烦在于

Options
可以直接访问。我理想的最终情况是
Options
无法从课堂外访问。但我不知道如何设置它,以便 EF 可以设置字符串值,但不能设置我的代码。

任何见解 - 即使是“这已经是你能得到的最好的了。小心点”将不胜感激。

c# entity-framework
1个回答
0
投票

您可以为此使用数据传输对象 (DTO)。

public class DropdownOptions
{
    public string Options { get; set; } = "";
}

public class DropdownOptionsDto
{
    public string[] Options { get; set; }
}

然后在从数据库获取下拉选项的代码中,像这样进行平滑:

var dropdownOptions = _dbContext.DropdownOptions
    .Tolist()
    .Select(x => new DropdownOptionDto
    {
         Options = x.Options.Split('|')
    });
© www.soinside.com 2019 - 2024. All rights reserved.