使用enum作为继承结构在实体框架中的范围

时间:2016-03-18 08:16:27

标签: c# performance entity-framework enums

这通常是如何构造实体,将id映射到数据库中的int

public class Person
{
    public int Id { get; set; }
    public string Name { get; set; }
}

public class Address
{
    public int PersonId { get; set; }
    public string Street { get; set; }
}

我开始为我的实体实现这样的系统:

public enum PersonId : int { }

public class Person
{
    public PersonId Id { get; set; }
    public string Name { get; set; }
}

public enum AddressId : int { }

public class Address
{
    public AddressId Id { get; set; }
    public PersonId PersonId { get; set; }
    public string Street { get; set; }
}

将枚举映射到数据库中的int(或其他结构)。

这样我可以扩展方法和代码,不会错误地要求具有person int id的特定地址,因为int总是一个int。

据我所知,F#有类似内置的内容吗?

我的问题是,有谁知道这是否会以任何方式影响实体框架的表现?

1 个答案:

答案 0 :(得分:3)

在IL级别,enum只是一个整数 ;任何体面的基于运行时的元编程库应该知道在没有任何中间转换的情况下直接转到int - 如果EF出错了我会很惊讶。

然而,对我而言,真正的问题更多是语义问题;这并非真正意味着意味着。您可能还会在某些序列化和UI工具中遇到问题(当他们正在查看如何使用值AddressId表示或解析100124时)等。

就个人而言,我不会这样做。混合什么值意味着确实是一个潜在的问题,但答案是不滥用类型系统。我"得到它"有些语言提供了别名/类型定义,允许你以检查的方式执行此操作,但枚举不仅仅是一个检查别名 - 它意味着更多。