3

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

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");
  }
}

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

4

2 回答 2

5

您需要一个额外的属性来包装并将其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,并具有一对多的关系,以便 aUser有很多Roles。这将允许 EF 为您管理一切,并意味着您的数据存储一致且可访问。逗号分隔的字符串使用起来不是特别愉快,不应该存储在数据库中。

于 2011-02-06T03:00:55.147 回答
1

您必须提供额外的属性来实现字符串和数组之间的转换逻辑。您将映射该属性并忽略 Roles 属性。

于 2011-02-06T00:26:36.643 回答