c# - 如何使用 EF 将数组属性映射到分隔字符串数据库字段?

标签 c# orm entity-framework-4 ef4-code-only

我有一个具有数组属性的对象,我想将其作为分隔字符串保存在数据库中。如何将该属性映射到数据库中的字段,反之亦然?

public class User() {
  public int Id { get; set; }
  public string[] Roles { get; set; }
}

不完整的配置类:

public class UserConfig : EntityTypeConfiguration<User> {
  public UserConfig() {
    this.Property(u => u.Roles).__???__
    this.Map(u => u.Properties<string[]>(r => r.Roles).__???__))
      .HasColumnName("roles");
  }
}

对于此示例,“角色”属性在转到数据库时将转换为“roleA、roleB、roleC”,然后在从数据库读取时转换回数组。某处是否有数据映射事件?

最佳答案

您需要一个额外的属性来包装 String 并将其转换为 String[]

public class User() {
  public int Id { get; set; }
  public string Roles { get; set; }
  public string[] RolesArray 
  { 
    get
    {
      return Roles.Split(',').ToArray();
    }
    set
    {
      Roles = String.Join(',', value);
    }
  }
}

首选的解决方案当然是在数据库中添加一个名为 Role 的新表,并具有一对多关系,以便 User 具有多个 角色。这将使 EF 能够为您管理一切,并意味着您的数据存储一致且可访问。逗号分隔的字符串使用起来不是特别愉快,不应该存储在数据库中。

关于c# - 如何使用 EF 将数组属性映射到分隔字符串数据库字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4908311/

相关文章:

c# - 来自无法访问的代码的无法捕获的异常

c# - ForEach TreeNode.Nodes 取出空节点

python - 按每组的最近日期获取第一个元素

c# - 没有外键的关联

c# - 在 Winform 中自动调整表格布局面板不起作用?

c# - 如何获取目录名称

java - 如何让 XStream 映射回类型化列表?

reflection - Automapper 与运行时通过配置文件和反射进行映射

entity-framework-4 - 按 ID 的 EF4 通用搜索

c# - 使用 EntityFramework : Context per Presenter or long conversation pattern for Windows Forms Applications?