我第一次使用 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 回答
- 0 關注
- 137 瀏覽
添加回答
舉報
0/150
提交
取消