Я использую Entity Framework и .Net Core 2.0 впервые (я также довольно новичок в C #, но я использую традиционные .Net Framework и VB с версии 1 ... так что я 'я не новичок в разработке .Net), и я уже столкнулся с проблемой создания моей базы данных.
Возьмем такой простой сценарий: я хочу сохранить некоторую информацию о некоторых электронасосах.Два свойства представляют собой диапазон типов min / max, поэтому я реализовал их как простой класс, таким образом:
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>
где-либо.
Это может быть просто ссылка на библиотеку, которую мне не хватает ...?В приведенном выше коде используется следующее:
using System;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
Однако ни в одной документации / примерах, которые я могу найти, нигде не указано, на какие библиотеки нужно ссылаться!
Заранее спасибо.
[PS: извинения тем, кто уже видел этот вопрос, я использую EF Core 2.0, а не EF6]