Csharp/C#教程:在SQL数据库和EF6中保存标志枚举。 这可能吗?分享


在SQL数据库和EF6中保存标志枚举。 这可能吗?

在ASP.NET应用程序上,我有一个标志枚举如下:

[Flags] enum Target : int { None = 0, Group = 1, Student = 2, Professor = 4, All = Group | Student | Professor } 

我可以使用Entity Framework 6在SQL数据库表中保存包含多个项目的值吗?

怎么会得救?

谢谢你,米格尔

为了使事情变得非常简单,可以将标志视为一个int sum(只是为了简单但实际上它们与按位运算一起工作)。

因此,对于您的情况(提供枚举),如果记录有两个目标(学生和教授),最终结果将是6。

EF将存储这个。 6.您已经告诉EF应该将此列存储为INT,因为您已经说过枚举应该被理解为int:

 enum Target : int { 

没有必要做任何事情(绝对没有!)。

为了让这个回到学生和教授,有一个Enum.Parse,您可以手动调用(仅在需要时),但EF也将填充已经转换的属性。

在您的代码中,您将不得不担心代码。 所以,例如,你可以这样做:

 var item = new Something() { Prop = Target.Student | Target.Professor }; context.Save(); var item2 = context.GetSomething(); if (item2.Prop.HasFlag(Target.Professor) && item2.Prop.HasFlag(Target.Student)) { // WOW! } 

就是这样。 我在EF6上使用它,根本没有配置。 至少采用CodeFirst方法。

但不要忘记,这只适用于较新版本的.NET框架。 请参阅EF文档中的Enum支持主题。

您可以将标志组合保存为int:

 int myFlags = (int)(Target.Group | Target.Professor); 

使用和不使用HasFlagAttribute枚举类型之间的唯一区别是它们在使用.ToString()时的编写方式(以及使用Enum.Parse时它们的解析方式)。 EF内部删除有关枚举类型的信息,并且仅使用基础枚举类型(考虑可为空性)。

上述就是C#学习教程:在SQL数据库和EF6中保存标志枚举。 这可能吗?分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/942441.html

(0)
上一篇 2021年11月13日
下一篇 2021年11月13日

精彩推荐