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、1 対多の関係を持ち、 aUserが多数の を持つようにすることRolesです。これにより、EF がすべてを管理できるようになり、データが一貫してアクセス可能に格納されます。カンマで区切られた文字列は扱いにくいため、データベースに保存しないでください。

于 2011-02-06T03:00:55.147 に答える
1

文字列と配列の間の変換ロジックを実装する追加のプロパティを提供する必要があります。そのプロパティをマップし、Roles プロパティを無視します。

于 2011-02-06T00:26:36.643 に答える