围绕DB / Domain模型中原始类型的EF对象包装器

时间:2019-01-26 09:01:49

标签: c# entity-framework primitive-types

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

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

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

到目前为止很普通:)但是,现在,我想将一堆非DB逻辑与我的PhoneNumber相关联。

我可以制作一个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对象应该在Number表中的行上具有FK”。我不想-我想保持数据库模型不变。我可以在C#中手动进行转换,但最终会产生很多样板。

我想告诉EF,“我知道这看起来像一个对象,但是请相信我,它是一个原始数据。当您将其存储在数据库中时,它实际上是一个原始数据列。请将其转换为并在与数据库进行交互时以适当的方式(如果需要,由Number类提供)以原始方式提供数据。

EF中是否存在这个概念?

如果是的话,找到此文档的正确搜索词是什么?

有兴趣了解EF或EFCore。

1 个答案:

答案 0 :(得分:0)

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

  

看起来您要查找的搜索词是EF6中的“复杂类型”。

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

  

在EFCore中,相似(但不相同)的概念是“拥有实体类型”。

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