![](/img/trans.png)
[英]C# - How can I do a simple query in Entity Framework using lambda?
[英]How do I implement a simple “complex type” in Entity Framework Core 2/C#?
我是第一次使用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>
。
它可能只是我缺少的图书馆参考......? 上面的代码使用以下代码:
using System;
using Microsoft.EntityFrameworkCore;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
但是,我可以在任何地方找到的文档/示例中没有一个显示哪些库需要引用!
提前致谢。
[PS:向那些已经看过这个问题的人致歉,我使用的是EF Core 2.0,而不是EF6]
典型......总是这样,不是吗? 发布后5分钟,您会发现自己问题的答案....
在这种情况下,答案可以在这里找到:
https://docs.microsoft.com/en-us/ef/core/modeling/owned-entities
EF Core将这种实体称为“拥有”实体,而不是“复杂类型”。
只需将这些行添加到“OnModelCreating”即可解决问题:
modelBuilder.Entity<Pump>().OwnsOne(p => p.normalCurrent);
modelBuilder.Entity<Pump>().OwnsOne(p => p.normalFlowRate);
数据库现在创建(正确地,我认为,我尚未验证)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.