Tag: entity framework core

原始SQL查询和entity framework核心

我将我的应用程序迁移到ASP.NET MVC Core和Entity Framework Core,我发现了问题。 我有像这样的实体的原始SQL查询 var rawSQL = dbContext.Database.SqlQuery(“Raw SQL Query”).ToList(); 但是context.Database没有SqlQuery 。 你有这个问题的解决方案吗?

在Entity Framework Core中包含集合

例如,我有这些实体: public class Book { [Key] public string BookId { get; set; } public List Pages { get; set; } public string Text { get; set; } } public class BookPage { [Key] public string BookPageId { get; set; } public PageTitle PageTitle { get; set; } public int Number { get; set; } } […]

可以在Entity Framework Core中创建基于String的Include替代方案吗?

在API上我需要动态包含但是EF Core不支持基于String的包含。 因此我创建了一个映射器,它将字符串映射到添加到列表中的lambda表达式: List<List> expressions = new List<List>(); 请考虑以下特定类型: public class EFContext { public DbSet P1s { get; set; } public DbSet P2s { get; set; } public DbSet P3s { get; set; } } public class P1 { public P2 P2 { get; set; } public P3 P3 { get; set; } } public […]

entity framework7 RC 1和ASP.NET MVC 6中的种子初始数据

似乎在Entity Framework 7中还没有对种子数据的原生支持( https://github.com/aspnet/EntityFramework/issues/629 )。 Microsoft提供的模板代码中没有DbMigrationsConfiguration类,也没有Seed方法。 那么如何在使用Entity Framework 7 RC 1的ASP.NET MVC 6 Web应用程序中播种数据呢?

entity framework核心:记录单个数据库上下文实例的查询

使用EF Core(或任何ORM)我想跟踪ORM在我的软件中进行某些操作期间对数据库的查询次数。 我之前在Python下使用过SQLAlchemy,在这个堆栈上,这很容易设置。 我通常有一个unit testing,它针对一个场景的查询数量,针对内存中的SQLite数据库进行断言。 现在我想使用EF Core做同样的事情,并查看了Logging文档 。 在我的测试设置代码中,我按照文档说的那样做: using (var db = new BloggingContext()) { var serviceProvider = db.GetInfrastructure(); var loggerFactory = serviceProvider.GetService(); loggerFactory.AddProvider(new MyLoggerProvider()); } 但我遇到的问题我怀疑是以下结果(也来自文档): 您只需要使用单个上下文实例注册记录器。 注册后,它将用于同一AppDomain中上下文的所有其他实例。 我在测试中看到的问题表明我的记录器实现是在多个上下文中共享的(这与我阅读它们时的文档一致)。 并且因为a)我的测试运行器在并行运行测试而b)我的整个测试套件创建了数百个db上下文 – 它不能很好地工作。 问题/问题: 我想要的是什么? 即我可以使用仅用于该db上下文实例的db上下文注册记录器吗? 还有其他方法可以完成我想要做的事情吗?

使用不同的程序集添加迁移

我正在ASP.NET CORE 1.0.0中做一个项目,我正在使用EntityFrameworkCore。 我有单独的程序集,我的项目结构如下所示: ProjectSolution -src -1 Domain -Project.Data -2 Api -Project.Api 在我的Project.Api是Startup类 public void ConfigureServices(IServiceCollection services) { services.AddDbContext(); services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); } DbContext在我的Project.Data项目中 public class ProjectDbContext : IdentityDbContext { public ProjectDbContext(DbContextOptions options) : base(options) { } protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder) { var builder = new ConfigurationBuilder(); builder.SetBasePath(Directory.GetCurrentDirectory()); builder.AddJsonFile(“appsettings.json”); IConfiguration Configuration = builder.Build(); optionsBuilder.UseSqlServer( […]

EF Core中的多个Includes()

我有一个扩展方法,允许您在EF中一般包含数据: public static IQueryable IncludeMultiple(this IQueryable query, params Expression<Func>[] includes) where T : class { if (includes != null) { query = includes.Aggregate(query, (current, include) => current.Include(include)); } return query; } 这允许我在我的存储库中有这样的方法: public Patient GetById(int id, params Expression<Func>[] includes) { return context.Patients .IncludeMultiple(includes) .FirstOrDefault(x => x.PatientId == id); } 我相信扩展方法在EF Core之前有效,但现在包括“children”就像这样: var blogs = context.Blogs […]

EF Core 1.1迁移 – 当前的CSharpHelper不能支持类型的文字

这似乎是一个非常模糊的错误,我甚至不知道从哪里开始…… 当前的CSharpHelper不能支持’System.Func`3 [Microsoft.EntityFrameworkCore.Metadata.IProperty,Microsoft.EntityFrameworkCore.Metadata.IEntityType,Microsoft.EntityFrameworkCore.ValueGeneration.ValueGenerator]’类型的文字。 配置您的服务以使用可以的服务。 这是在我跑的时候发生的 dotnet ef migrations add initial 更新1 – 基于Rob的问题 应用程序的体系结构使用了丰富的域模型,因此有一些“解决方法”可以获取封装集合等内容,而Jimmy Bogard的类型枚举模式也可以使用。 每个域模型对象在数据访问层中都有自己的EntityTypeBuilder类,所有这些都是从OnModelCreating中的DbContext 。 这些也会向Console输出一些信息,因此我可以看到构建器没有导致任何错误(此时都没有错误)。 DbContext仅为聚合根实体公开DbSet ,或者以另一种方式公开,只显示具有相应存储库类的实体。 其余的域模型对象是导航属性,因此不需要通过DbContext公开DbContext 。 平台细节(据我所知) .NET Core 1.1(运行时+ SDK) EF Core 1.1 Microsoft.EntityFrameworkCore.Tools 1.0.0-preview2-final Microsoft.EntityFrameworkCore.Design 1.0.0-preview2-final

如何解决.net核心构建错误NETDSDK1061和警告MSB3277

我遇到了问题,我的AspNetCore.App-metapackage引用了较低版本的EntityFrameworkCore(2.1.2),而不是EfCore提供程序包(NpgSql,引用2.1.3)。 结果是警告MSB3277( 这是问题 )。 对此的快速修复是接受的答案。 另一个答案指出,我使用的是较低的Microsoft.AspNetCore.App软件包(当时为2.1.1),而不是上一个稳定版本(2.1.4)。 更改包版本是不可能的(见下图)。 我在类库项目中遇到了与Microsoft.NETCore.App相同的问题 我甚至没有注意到我使用了比现有更旧的元数据包。 直到今天,我总是检查,如果NuGet包管理器中有任何更新。 我使用了默认的项目模板,并且始终安装了最新的.NetCore SDK,相信这已经足够了。 不是。 在研究了这个问题之后,我发现,我可以强制我的项目使用特定的.NETCore.App或AspNetCore.App元数据包和软件包管理器控制台( Install-Package Microsoft.NETCore.App -Version 2.1.4或者Install-Package Microsoft.AspNetCore.App -Version 2.1.4 )。 在那个命令之后我有一个构建错误( NETSDK1061: The project was restored using Microsoft.NETCore.App version 2.1.4, but with current settings, version 2.1.0 would be used instead. To resolve this issue, make sure the same settings are used for restore […]

使用Include或ThenInclude或Select / Many with ONE查询无法加载相关数据

1测试分配了1个TestType。 我需要加载与Test OR not和Schoolclass,Subject和Assigned Pupils相关的所有TestType实体到测试(PupilsTests) .SelectMany或.Select在运行时失败。 我尝试了Include和ThenInclude的不同组合,但没有机会通过PupilsTests进行测试。 当我使用context.Tests开始查询时,我只能通过测试获得PupilsTests 但结果是我只得到TestTypes分配给Test – innerjoin – 但我需要所有TestTypes及其测试和他们的PupilsTests,我想在一个查询中。 var testtypes = await context.TestTypes .Include(x => x.Schoolclass) .Include(x => x.Subject) .Include(x => x.Tests.SelectMany(z => z.PupilsTests)) .Where(t => t.SchoolyearId == schoolyearId) .AsNotTracking() .ToListAsync(); public class TestType { public TestType() { Tests = new HashSet(); } // Props removed for clarity public int […]