2011-02-05 23 views
3

我有一個數組屬性的對象,我想在數據庫中作爲分隔字符串持久化。如何將該屬性映射到數據庫中的字段並反之亦然?如何使用EF將數組屬性映射到分隔字符串db字段?

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」,然後變換回的陣列時從數據庫中讀取。某處是否有數據映射事件?

回答

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,並有一個一對多的關係,使一個User有許多Roles。這將允許EF爲您管理所有事情,並且意味着您的數據以連貫且可訪問的方式存儲。逗號分隔的字符串並不是特別令人愉快的工作,不應該存儲在數據庫中。

+0

「不應該存儲在數據庫中」爲什麼? – 2016-09-21 01:41:37

1

你必須提供額外的屬性,它將實現字符串和數組之間的轉換邏輯。您將映射該屬性並忽略Roles屬性。

相關問題