假设我的数据库中有一个联系人表,其中有一个 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/