Bas*_*bus 15 c# entity-framework-core
我正在使用EF Core和数据库优先方法,使用"Scaffold-DbContext"命令生成我的DbContext/Entities.
我怎样才能指导脚手架的DbContext某一个领域在一定的表格应该生成代码,使用枚举,而不是仅仅一个int?
以下是您在常规EF中的使用方法:https: //www.devu.com/cs-asp/lesson-69-mapping-enum-types-entity-properties-framework-designer/
此枚举已在代码中定义:
public enum StateEnum {
Ok = 1,
Fail = 2
}
Run Code Online (Sandbox Code Playgroud)
这就是Scaffold-DbContext给我的
public partial class Foo
{
public int Id { get; set; }
public int State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这就是我想要它创建的:
public partial class Foo
{
public int Id { get; set; }
public StateEnum State { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
MrK*_*shi 21
EF Core 2.1中的值转换是否符合您的需求?
https://docs.microsoft.com/en-us/ef/core/modeling/value-conversions
快速示例:
entity.Property(e => e.MyEnumField)
.HasMaxLength(50)
.HasConversion(
v => v.ToString(),
v => (MyEnum)Enum.Parse(typeof(MyEnum),v))
.IsUnicode(false);
Run Code Online (Sandbox Code Playgroud)
小智 12
接受的答案并不能解决问题。问题是“我如何指示 Scaffold-DbContext 某个表中的某个字段应该生成代码以使用 Enum 而不仅仅是 int?” 许多答案都指出,Entity Framework Core 2.1 现在支持值转换。如果您使用代码优先而不是数据库优先,那么这很有用。Scaffold-DbContext 每次都会覆盖 DBContext。就我个人而言,我对枚举作为数据库中的整数没有问题。但我不想在代码中使用整数。
你可以
我选择了替代方案 2。这是迄今为止我发现的最简单的一种,并且使用 git-compare 恢复类非常容易。我可以在一分钟内更改我的所有枚举。
如果有人有更好的解决方案。请告诉我。
A.J*_*uer 11
因为标题问题,我来到这里.不确定这是否适用于"Scaffold-DbContext",但它在DbContext(Microsoft.EntityFrameworkCore 2.0.1.0)中通过显式设置枚举的基本类型,即使枚举元素的默认基础类型为int也是如此.您也可以使用Fluent API来设置默认值(尤其是枚举以1开头的情况).
public enum StateEnum : int
{
Ok = 1,
Fail = 2
}
Run Code Online (Sandbox Code Playgroud)
枚举的已批准类型是byte,sbyte,short,ushort,int,uint,long或ulong.
所以我认为这适用于任何这些.枚举(C#参考)
public class MyDbContext : DbContext
{
protected override void OnModelCreating(ModelBuilder builder)
{
builder.Entity<Foo>().Property(x => x.State).HasDefaultValue(StateEnum.Ok);
}
}
Run Code Online (Sandbox Code Playgroud)
Dej*_*jan 10
从Entity Framework Core 2.1开始,EF支持Value Conversions以专门解决需要将属性映射到不同类型以进行存储的方案.
特别是对于Enums,您可以使用提供的EnumToStringConverter
或EnumToNumberConverter
.
归档时间: |
|
查看次数: |
24911 次 |
最近记录: |