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