gpt4 book ai didi

entity-framework - 将 ADO.net Entity Framework 4 与枚举一起使用?我该怎么做?

转载 作者:行者123 更新时间:2023-12-04 05:35:11 25 4
gpt4 key购买 nike

问题 1:我在玩 EF4 并且我有一个模型类,例如:

public class Candidate {

public int Id {get;set;}
public string FullName {get;set;}
public Gender Sex {get;set;}
public EducationLevel HighestDegreeType {get;set;}
}

这里 Gender 和 EducationLevel 是枚举,如:
public enum Gender {Male,Female,Undisclosed}
public enum EducationLevel {HighSchool,Bachelors,Masters,Doctorate}

如果出现以下情况,我如何让候选类(class)、性别和教育水平与 EF4 一起工作:
  • 我做模型先开发
  • 我是先做db开发

  • 编辑:将与对象上下文相关的问题移至另一个问题 here .

    最佳答案

    显然 int <-> enum won't be supported in the initial release of EF 4. 我同意那些说这很糟糕的人。

    我正在使用为我进行类型转换的属性

    public partial class MyEntity
    {
    public MyEnum HurrEnum {get{return (MyEnum)Hurr;} set{Hurr = (int)value;}}
    }

    如果你“正确地”命名东西,它看起来并没有那么糟糕(这意味着它看起来并不愚蠢)。例如,我有一个 ReasonCode 枚举,它作为一个 Reason 存储在数据库中,所以我有该属性的 Reason 和 ReasonCode 版本。目前效果很好。

    首先,我刚刚开始使用 EF4,所以我不了解它的工作原理。我认为它类似于 L2S,但具有更好的实体支持。把这个和一粒盐一起吃。

    需要明确的是,此属性是为了方便起见,如果您尝试使用此属性查询数据库,我 90% 肯定 EF 会做出不良 react 。 EF 不知道你的属性(property),也不能用它来构造 sql。所以这:
    var foo = from x in Db.Foos where x.HurrEnum == Hurr.Durr select x;

    在以下情况下可能无法按预期运行:
    var foo = Db.Foos.Where(x=> x.HurrEnum == Hurr.Durr);

    可能会导致整个 Foos 表被带入内存然后解析。 这个属性是为了方便,应该只在数据库被命中后使用! 如:
     // this is executed in the sql server
    var foo = Db.Foos.Where(x=> x.Hurr == 1 || x.Hurr == 2).ToArray();
    // this is then done in memory
    var hurrFoos = foo.Where(x=> x.HurrEnum == Hurr.Durr);

    如果你不明白区别就在这里,那么你就是在玩火。您需要了解 EF/L2S 如何解释您的代码并将其转换为 sql 语句。

    关于entity-framework - 将 ADO.net Entity Framework 4 与枚举一起使用?我该怎么做?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2065612/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com