【问题标题】:How to create strongly-typed entities如何创建强类型实体
【发布时间】:2012-02-03 07:11:36
【问题描述】:

阅读this blog post about Primitive Obsession我在想:

  1. 如何使用 Entity Framework Code First 创建强类型实体? (特别是关于将这些强类型映射到 SqlServer 中的原始类型)

  2. 这有意义吗? (我从未在网上找到任何使用这种方法的示例/教程)

假设我们有一个带有强类型邮政编码属性as we can see here 的地址实体/类。

【问题讨论】:

    标签: entity-framework ef-code-first


    【解决方案1】:

    根据评论编辑版本:

    这是有道理的,但您从未找到任何示例,因为首先使用 EF 代码无法直接实现。为什么?

    • 因为 EF 不支持没有默认构造函数的实体或复杂类型,也不能使用带参数的构造函数。
    • 因为 EF 不提供任何类型转换,所以 EF 必须直接映射到原始属性。
    • 因为 EF 不支持没有 setter 的属性。

    作为一种解决方法,您可以使用私有 setter 和默认构造函数(也许它不必是公共的,但我没有尝试过)和带有参数和正确映射属性的构造函数(至少 with EDMX it works)。

    【讨论】:

    • 所以,我从“_value”字段中删除了“readonly”关键字,并在 Address 类中的属性“Value”中添加了一个私有集,现在 EF 按预期映射。问题是,这种变化如何违反原始痴迷的原始观念?
    • 所以我的回答是错误的。我编辑了我的答案以供其他人参考,但您应该将您的解决方案放在单独的答案中并接受它。
    • 这个改变稍微违反了模式(例如它提供了默认构造函数),但是如果你想用 EF 遵循原始类型封装,它是必需的。
    • 默认构造函数也是私有的
    猜你喜欢
    • 1970-01-01
    • 2014-02-17
    • 1970-01-01
    • 1970-01-01
    • 2011-08-31
    • 2022-01-06
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    相关资源
    最近更新 更多