jed*_*atu 3 c# orm entity-framework-4 ef4-code-only
我有一个带有数组属性的对象,我希望将其作为分隔字符串保存在数据库中.如何将该属性映射到数据库中的字段,而不是?
public class User() {
public int Id { get; set; }
public string[] Roles { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
不完整的配置类:
public class UserConfig : EntityTypeConfiguration<User> {
public UserConfig() {
this.Property(u => u.Roles).__???__
this.Map(u => u.Properties<string[]>(r => r.Roles).__???__))
.HasColumnName("roles");
}
}
Run Code Online (Sandbox Code Playgroud)
对于此示例,"Roles"属性在转到数据库时将转换为"roleA,roleB,roleC",然后在从数据库读取时转换回数组.某处有数据映射事件吗?
您需要一个包装并转换String为a 的附加属性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);
}
}
}
Run Code Online (Sandbox Code Playgroud)
首选的解决方案当然是将一个新表添加到您的数据库中Role,并且具有一对多关系,以便a User有很多Roles.这将允许EF为您管理所有内容,这意味着您的数据将以连贯和可访问的方式存储.逗号分隔的字符串使用起来不是特别令人愉快,不应存储在数据库中.