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 编辑:
正如奎因所建议的那样。我创建了另一个 属性
- 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。
我必须使用 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 编辑: 正如奎因所建议的那样。我创建了另一个 属性
- 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。