在实体框架中使用“自定义数据类型”

时间:2010-06-23 12:37:45

标签: entity-framework entity-framework-4

我想知道是否可以将某些数据库列映射到自定义数据类型(自定义类),而不是像string,int等基本数据类型。我将尝试用一个具体的例子来更好地解释它:

假设我有一个表,其中一列包含特殊格式的(文本)数据(例如,数字后跟分隔符,然后是一些任意字符串)。例如。表格如下:

Table "MyData":

 ID |Title(NVARCHAR) |CustomData (NVARCHAR) 
 ---+----------------+-----------------------
 1  |Item1           |1:some text  
 2  |Item2           |333:another text  

(假设我不允许更改数据库)在我的域模型中,我希望将此表由两个类表示,例如像这样的东西:

public class MyData
{
  public int ID { get; set; }
  public string Title { get; set; }
  public CustomData { get; set; }
}
public class CustomData
{
  public int ID { get; set; }
  public string Text { get; set; }

  public string SerializeToString()
  {
    // returns the string as it is stored in the DB
    return string.Format("{0}:{1}", ID, Title);
  }
  public string DeserializeFromString(string value)
  {
    // sets properties from the string, e.g. "1:some text"
    // ...
  }
}

实体框架(V4)是否提供了创建和使用此类“自定义数据类型”的方法?

1 个答案:

答案 0 :(得分:1)

没有。不管怎样,不是那样的。

但是,您可以通过以下方式解决此问题:

  • 编写DB函数进行映射,然后在SSDL中使用定义查询。
  • 使用一种类型进行EF映射,然后使用上面显示的另一种类型,然后进行投影。
  • 向EF类型添加扩展属性以执行此转换。您不能在L2E中使用它们,但在其他代码中可能很方便。