Entity Framework 6 如何将用户定义的数据类型 属性 映射为数据库中的 varchar 类型列

Entity Framework 6 How to Map a UserDefined datatype property as varchar type column in DB

我必须使用 EntityFramework 将用户定义类型 属性 映射为 Varchar 列 6. 所以我有一个名为 EngineQuota 的实体:

'''

 [Table(EngineQuotas)]
    public partial class EngineQuota
    {
        public int Id { get; set; }
        
        public DecimalList Quotas { get; set; }

        public int? EngineId { get; set; }    

        private EngineQuotas()
        {
            this.Quotas = new DecimalList();
        }
    }

'''

DecimalList 是一个单独的 class,它包含一个已排序的小数列表 '''

public class DecimalList : IEnumerable<decimal>
    {
        private readonly SortedSet<decimal> items;

        public DecimalList()
        {
            this.items = new SortedSet<decimal>();
        }

        public IEnumerator<decimal> GetEnumerator()
        {
            return this.items.GetEnumerator();
        }

        IEnumerator IEnumerable.GetEnumerator()
        {
            return this.GetEnumerator();
        }
 public override string ToString()
    {
        return string.Join(",", this.items.Select(n => n.ToString()).ToArray());             
    }
       
    }
}

''' 在数据库中,我希望将 DecimalList 中的项目的逗号分隔值存储在 Table EngineQuotas 中的列配额中。这在 Entity Framework6 中怎么可能。尝试使用 ComplexType 但无法获得一些结果

为 Awnser 编辑: 正如奎因所建议的那样。我创建了另一个 属性

  1. public DecimalList DecimalListQuotas { 得到;放; } 并将配额 属性 更改为键入字符串以与 DB 匹配。配额 属性 现在在内部使用 DecimalListQuotas 进行 get set
e public string Quotas
    {
        get
        {
            return DecimalListQuotas.ToString();
        }
        private set
        {
            decimal[] nums = value.Split(',').Select(decimal.Parse).ToArray();
            this.DecimalListQuotas.AddRange(nums);
        }

    }










                                             

看看 EF custom converters - 这应该可以解决问题。
一件事 - 如果您正在转换集合,那么您可能需要在此实体的配置中提供自定义比较器,因为更改跟踪器可能不会检测到集合更新。

编辑:对于 EF6,您可以尝试 this