c# - EF 对象包装器围绕数据库/域模型中的原始类型

标签 c# entity-framework primitive-types

假设我的数据库中有一个联系人表,其中有一个 PhoneNumber 列,它是一个字符串,例如“+44123456789”。

在我的领域模型中,我通常会:

public class Contact {
    public int Id { get; set; }
    public string PhoneNumber { get; set; }
}

到目前为止很普通 :) 但现在,我想将一堆非数据库逻辑与我的电话号码相关联。

我可以创建一个 PhoneNumber 对象来保存所有这些逻辑,并将我的 PhoneNumber 属性改为 Number 对象:

public class Contact {
    public int Id { get; set; }
    public Number PhoneNumber { get; set; }
}
public class Number{
    public string Number { get; set; }
    //... other logic, getter wrappers, etc. ...
}

但是 EF 会将其解释为“Number 是一种具有单独表的新类型,并且 Contact 对象应该有一个 FK 到 Number 表中的一行”。我不想要 - 我想保持数据库模型不变。我可以在我的 C# 中手动进行转换,但它最终会产生大量样板文件。

我希望能够告诉 EF,“我知道这看起来像一个对象,但请相信我,它是一个原始数据。当您将它存储在数据库中时,它实际上是一个原始列。请将它转换为并在您与数据库交互时以适当的方式(由 Number 类提供,如有必要)从原语中获取。

EF中有这个概念吗?

如果是这样,查找此文档的正确搜索词是什么?

有兴趣了解 EF 或 EFCore。

最佳答案

答案,由 Ivan Stoev 提供(请参阅问题评论):

Looks like the search term you are looking for is "Complex Type" in EF6.

示例搜索结果:https://entityframework.net/complex-type

In EFCore, a similar (but not identical) concept is "Owned Entity Type".

示例搜索结果:https://learn.microsoft.com/en-us/ef/core/modeling/owned-entities

关于c# - EF 对象包装器围绕数据库/域模型中的原始类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54377008/

相关文章:

c# - Gridview EditItemTemplate DropDownList 获取 SelectedValue

c# - 接收打印作业并将其转发到 LAN 中的打印机的软件

c# - Entity Framework + 生命周期 + StructureMap + 工作单元 + Windows 窗体?

c# - 在 mvc Entity Framework 中的下拉选择中填充文本框

c - 存储(和打印)整数的最大数据类型是什么?

haskell - 在 Haskell 中何时选择 'Natural' 而不是 'Integer'?

c# - 数据类冲突有什么解决方法吗?

c# - 数组到 XML 的 .NET 序列化。如何为数组类型设置别名?

sql - Entity Framework 索引所有外键列

c - 计算 C 中结构的大小(数据对齐问题)