Tag: entity framework core

entity framework核心在转换时是延迟加载的

在将实体模型转换为DTO时,我遇到了Entity Framework Core(v2.0.1)的问题。 基本上,它是由任何其他版本的短语,懒惰加载,当我不想要它。 这是一个简单的.NET Core Console应用程序(使用Microsoft.EntityFrameworkCore.SqlServer(2.0.1)包)。 using Microsoft.EntityFrameworkCore; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; using System.ComponentModel.DataAnnotations.Schema; using System.Linq; namespace EfCoreIssue { class Program { static void Main(string[] args) { var dbOptions = new DbContextOptionsBuilder() .UseSqlServer(“Server=.;Database=EfCoreIssue;Trusted_Connection=True;”) .Options; // Create and seed database if it doesn’t already exist. using (var dbContext = new ReportDbContext(dbOptions)) { if (dbContext.Database.EnsureCreated()) { […]

EF Core包含多个子级别集合

考虑这个聚合根… class Contact { ICollection Addresses { get; set; } ICollection Items { get; set; } ICollection Events { get; set; } } ……我这样用过…… class Person { Contact ContactDetails { get; set; } } 如何通过联系人急切加载所有集合? 我试过这个…… Context .Set() .Include(o => o.ContactDetails) .ThenInclude(o => o.Addresses) .ThenInclude(????) . … 我也试过这个…… Context .Set() .Include(o => o.ContactDetails.Addresses) .Include(o => […]

Moq并设置DB Context

我有一个Entity Framework数据库上下文文件。 我正在尝试在NUnit中设置Moq框架。 目前接收Moq Nunit测试的错误如下。 如何设置DBContext,并将项目添加到产品表? “没有为此DbContext配置数据库提供程序。可以通过覆盖DbContext.OnConfiguring方法或在应用程序服务提供程序上使用AddDbContext来配置提供程序。如果使用AddDbContext,则还要确保您的DbContext类型接受DbContextOptions对象它的构造函数并将其传递给DbContext的基础构造函数。“ 电子DB数据库文件 public partial class ElectronicsContext : DbContext { public ElectronicsContext() { } public ElectronicsContext(DbContextOptions options) : base(options) { } public virtual DbSet Product { get; set; } public virtual DbSet ProductCategory { get; set; } Startup.cs var connection = @”Server=localhost;Database=Electronics;Trusted_Connection=True;ConnectRetryCount=0″; services.AddDbContext(options => options.UseSqlServer(connection)); Moq Nunit测试 [SetUp] public void […]

如何在.Net Core Web API中停止自引用循环?

我有一些问题,我猜这些问题与使用.NET Core Web API和Entity Framework Core进行自引用有关。 我添加时,我的Web API开始窒息。包括一些导航属性。 我发现旧的Web API中似乎是一个解决方案,但我不知道如何为.NET Core Web API实现相同的function(我还处于早期学习阶段)。 较旧的解决方案是将其粘贴在Global.asax的Application_Start()中: GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = ReferenceLoopHandling.Serialize; 我怀疑这是在StartUp的ConfigureService()方法中处理的,但除此之外我不太了解。 或者有更合适的方法来处理这个问题吗?

错误:实体类型需要主键

我想扩展这个问题上提出的问题 将列表框绑定到observablecollection 通过赋予它持久化数据的能力。 除了我安装Entity Framework Core之外,结构大致相同,创建了一个DbContext类来保存记录。 我添加了一个按钮将数据集保存到SQL Server。 我没有遇到编译错误但是当我试图将数据保存在数据库中时,我得到了这个运行时exception: Message =实体类型’Fruit’需要定义主键。 整个例外情况如下 System.InvalidOperationException未处理 的HResult = -2146233079 Message =实体类型’Fruit’需要定义主键。 来源= Microsoft.EntityFrameworkCore 堆栈跟踪: 在Microsoft.EntityFrameworkCore.Internal.ModelValidator.ShowError(String message) 在Microsoft.EntityFrameworkCore.Internal.ModelValidator.EnsureNonNullPrimaryKeys(IModel模型) 在Microsoft.EntityFrameworkCore.Internal.ModelValidator.Validate(IModel模型) 在Microsoft.EntityFrameworkCore.Internal.RelationalModelValidator.Validate(IModel模型) 在Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.CreateModel(DbContext上下文,IConventionSetBuilder conventionSetBuilder,IModelValidatorvalidation器) 在Microsoft.EntityFrameworkCore.Infrastructure.ModelSource。 c__DisplayClass14_0.b__0(对象k) 在System.Collections.Concurrent.ConcurrentDictionary 2.GetOrAdd(TKey key, Func 2 valueFactory) 在Microsoft.EntityFrameworkCore.Infrastructure.ModelSource.GetModel(DbContext上下文,IConventionSetBuilder conventionSetBuilder,IModelValidatorvalidation器) 在Microsoft.EntityFrameworkCore.Internal.DbContextServices.CreateModel() 在Microsoft.EntityFrameworkCore.Internal.LazyRef 1.get_Value() at Microsoft.EntityFrameworkCore.Internal.DbContextServices.get_Model() at Microsoft.EntityFrameworkCore.Infrastructure.EntityFrameworkServiceCollectionExtensions.c.b__0_6(IServiceProvider p) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteRuntimeResolver.VisitFactoryService(FactoryService factoryService, ServiceProvider provider) at Microsoft.Extensions.DependencyInjection.ServiceLookup.CallSiteVisitor 1.get_Value() at […]

使用EntityFramework.Core从自引用表加载完整层次结构

解释为什么这个问题不同于: EF – 多个包括急切加载分层数据。 不好的做法? 可能的重复是基于意见的问题,如果这是一个不好的做法,而我的问题往往得到如何做的技术解决方案,独立于意见,如果这是一个好的做法。 我将此决定留给产品所有者,需求工程师,项目经理和想要该function的客户。 给出的答案要么解释为什么这是一个不好的做法,要么使用一种对我不起作用的方法(使用Include()和ThenInclude()产生硬编码深度,而我需要灵活的深度)。 在当前项目(.NET核心web api)中,我尝试从自引用表中加载层次结构。 经过谷歌搜索后,我很惊讶这样的任务(我认为这是微不足道的)似乎并不是微不足道的。 好吧,我有这个表来形成我的层次结构: CREATE TABLE [dbo].[Hierarchy] ( [Id] INT IDENTITY (1, 1) NOT NULL, [Parent_Id] INT NULL, [Name] NVARCHAR (50) NOT NULL, PRIMARY KEY CLUSTERED ([Id] ASC), CONSTRAINT [FK_Hierarchy_Hierarchy] FOREIGN KEY ([Parent_Id]) REFERENCES [dbo].[Hierarchy] ([Id]) ); 在web api中,我尝试返回完整的层次结构。 一个可能特别的事情(可能会有所帮助)就是我要加载完整的表格。 我也知道我可以使用预先加载和导航属性(子项的Parent和InverseParent) _dbContext.Hierarchy.Include(h => h.InverseParent).ThenInclude(h => h.InverseParent)… 问题是这会加载硬编码深度(例如,如果我使用1 […]

如何使用集合

任何人都可以编写迷你指南,解释如何在EF中使用集合吗? 例如,我有以下模型: public class BlogPost { public int Id { get; set; } public string Title { get; set; } public string Content { get; set; } public DateTime DateTime { get; set; } public List Comments { get; set; } } public class PostComment { public int Id { get; set; } public BlogPost […]

entity frameworkCore 2.0.1 Eager加载所有嵌套的相关实体

我有一个简单的问题,但似乎无法找到解决方法。 我正在使用Entity Framework Core版本2.0.1,并希望默认加载我的所有实体。 例: public class Order { public int Id { get; set; } public string Name { get; set; } public int CustomerId { get; set; } public Customer Customer { get; set; } } public class Customer { public int Id { get; set; } public string Name { get; set; […]

entity framework核心:此平台不支持类型Udt。 (空间数据 – 地理)

我正在尝试entity framework核心,偶然发现了一个我从未见过的错误,无法弄清楚如何修复它。 我正在使用.net Core Web API 2.0和EntityFramework Core 2.00-preview2-final 这是一个触发错误的简单示例。 (概念:从数据库中获取用户的简单端点) 错误:System.PlatformNotSupportedException:此平台不支持类型Udt。 有什么建议? 问题是我在我的数据库中使用地理,但我在模型中将它用作字符串,因为entity framework核心还不支持空间数据…… 如何在不摆脱地理位置的情况下保持这种蛋糕的美味,这是一个重要特征吗? 编辑:请参阅我当前解决方案的答案

在Entity Framework Core中动态更改架构

UPD就是我解决问题的方法。 虽然它可能不是最好的,但它对我有用。 我在使用EF Core时遇到问题。 我想通过模式机制在项目数据库中为不同公司分离数据。 我的问题是如何在运行时更改模式名称? 我已经找到了关于这个问题的类似问题 ,但它仍然是答案,我有一些不同的条件。 所以我有Resolve方法,在必要时授予db-context public static void Resolve(IServiceCollection services) { services.AddIdentity() .AddEntityFrameworkStores() .AddDefaultTokenProviders(); services.AddTransient(); … } 我可以在OnModelCreating设置schema-name,但是,如前所述,这个方法只调用一次,所以我可以在这里设置模式名称globaly protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.HasDefaultSchema(“public”); base.OnModelCreating(modelBuilder); } 或者通过类似的属性在模型中 [Table(“order”, Schema = “public”)] public class Order{…} 但是如何在运行时更改模式名称? 我根据每个请求创建了ef的上下文,但首先我通过请求为数据库中的某个模式共享表格查找了用户的模式名称。 那么组织该机制的真正方法是什么: 根据用户的凭据计算出模式名称; 从特定架构的数据库中获取特定于用户的数据。 谢谢。 PS我使用PostgreSql,这是表名低的原因。