代码之家  ›  专栏  ›  技术社区  ›  M4N

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

  •  2
  • M4N  · 技术社区  · 14 年前

    我想知道是否可以将一些数据库列映射到自定义数据类型(自定义类),而不是字符串、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 回复  |  直到 14 年前
        1
  •  1
  •   Craig Stuntz    14 年前

    不,反正不是这样。

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

    • 编写一个db函数来进行映射,然后在ssdl中使用一个定义查询。
    • 使用一种类型作为ef映射,另一种类型如上面所示,然后进行投影。
    • 将扩展属性添加到ef类型以执行此转换。在L2e中不能使用这些代码,但在其他代码中可能很方便。