我第一次使用 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
提交
取消