为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 Entity Framework Core 2/C# 中实现简单的“复杂类型”?

如何在 Entity Framework Core 2/C# 中实现简单的“复杂类型”?

C#
江户川乱折腾 2021-06-27 20:08:34
我第一次使用 Entity Framework 和 .Net Core 2.0(我对 C# 也很陌生,但我从版本 1 开始就一直在使用传统的 .Net Framework 和 VB ......所以我不是新手到 .Net 开发),并且我已经遇到了创建数据库的问题。以这个简单的场景为例:我想存储一些关于一些电动泵的信息。其中两个属性是最小/最大类型范围,因此我将它们实现为一个简单的类,因此:public class Pump{    [Key]    public int pumpId { get; set; }    public string pumpName { get; set; }    public int pumpControlChannel { get; set; }    public MinMax normalCurrent { get; set; }    public MinMax normalFlowRate { get; set; }}[ComplexType]public class MinMax{    public int min { get; set; }    public int max { get; set; }}如您所见,我尝试了[ComplexType]装饰器,但无济于事。无论如何,现在创建一个简单的 DBContext 类来管理我的 Pumps 类。我正在使用 Sqlite:public class EFDB : DbContext{    public DbSet<Pump> pumps { get; private set; }    private static DbContextOptions GetOptions(string connectionString)    {        var modelBuilder = new DbContextOptionsBuilder();        return modelBuilder.UseSqlite(connectionString).Options;    }    public EFDB(string connectionString) : base(GetOptions(connectionString)) { }    protected override void OnModelCreating(ModelBuilder modelBuilder)    {        try        {            // modelBuilder.ComplexType<MinMax>();      // ComplexType not recognised            base.OnModelCreating(modelBuilder);        }        catch (Exception ex)        {            System.Diagnostics.Debugger.Break();        }    }}最后一个简单的静态类来调用它(我将它嵌入到一个更大的程序中......要复制这个问题,你可以将代码行粘贴到 program.cs 中):public static class TryMe{    public static void MakeMeFail()    {        using (var db = new EFDB("FileName=C:\\temp\\test_effail.db"))        {            try            {                db.Database.EnsureCreated();            }            catch (Exception ex)            {                System.Diagnostics.Debugger.Break();   // If we hit this line, it fell over            }        }        System.Diagnostics.Debugger.Break();   // If we hit this line, it worked.    }}只需调用TryMe.MakeMeFail(),代码就会失败db.Database.EnsureCreated()。从我读过的所有内容来看,[ComplexType]应该做我想做的……但事实并非如此。我也找不到modelBuilder.ComplexType<T>任何地方。
查看完整描述

1 回答

  • 1 回答
  • 0 关注
  • 108 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信