实体框架代码优先 CTP5:如何定义非原始类型

Posted

技术标签:

【中文标题】实体框架代码优先 CTP5:如何定义非原始类型【英文标题】:Entity Framework Code First CTP5 : How to define non primitive types 【发布时间】:2011-02-09 22:57:44 【问题描述】:

我首先测试 CTP5 的实体框架代码,我遇到了这个问题 我有一个具有 Uri (System.Uri) 类型的属性的类,但它看起来无法自动识别如何存储它,所以我收到类似

的错误
Problem in mapping fragments starting at line 23:No mapping specified for properties WebPage.Uri in Set WebPage

如何告诉模型将 Uri 映射到 varchar,例如,使用 uri 的 url??

【问题讨论】:

【参考方案1】:

实际的 POCO 模型必须绑定到原始类型。您可以使用复杂的类型绑定,例如:

[ComplexType()]
public class UriHelper

    public string StringRepresentation get;set;
    public Uri ActualUri()
    
        return new Uri(StringRepresentation);
    

如果你绝对需要的话,在你的实际对象中引用这个复杂类型作为 Uri 引用。然后,您的映射会将实际值的属性作为字符串引用。最后一个选项是创建一个从 URI 到字符串的自定义映射,反之亦然,以供 EF 引擎使用。但是,我不建议这样做。实际的数据库属性是 varchar 或 nvarchar 类型,而不是 URI。因此 EF 不知道 URI 是什么。

【讨论】:

以上是关于实体框架代码优先 CTP5:如何定义非原始类型的主要内容,如果未能解决你的问题,请参考以下文章

实体框架 CTP5,代码优先。多对多级联删除

EF4 CTP5 代码优先实现中的实体拆分场景

实体框架,无法创建类型为“XX”的常量值。此上下文仅支持原始类型或枚举类型

实体框架代码优先 - 通过主键将子实体添加到父实体

来自 sql 查询执行实体框架的匿名类型结果

如何以非递归方式定义“原始”类型?