Tag: entity framework core

Scaffold-DbContext在.net核心中抛出错误“找不到程序集”

我使用.net核心和entity framework核心1.1.0。 在包管理器控制台中尝试以下命令时 Scaffold-DbContext “Server=MyServer\\MyInstance;Database=MyDB;user=MyUsername;password=MyDbPassword;” Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models -t Table1,Table2 我收到了这个错误 找不到程序集’D:\ Work \ Projects \ src \ MyProject \ src \ MyProject.Api。\ bin \ Debug \ net461 \ win7-x64 \ MyProject.Data.exe’。 MyProject.Data是一个网络核心库。 MyProject.Api是一个.net完整框架核心api,它引用了MyProject.Data。 MyProject.Data的project.json文件 { “version”: “1.0.0-*”, “dependencies”: { “Microsoft.EntityFrameworkCore.Design”: “1.1.0”, “Microsoft.EntityFrameworkCore.SqlServer”: “1.1.0”, “Microsoft.EntityFrameworkCore.SqlServer.Design”: “1.1.0”, “Microsoft.EntityFrameworkCore.Tools”: “1.1.0-preview4-final” }, “frameworks”: { “net461”: {} } } […]

在Entity Framework Core中创建迁移时如何配置DbContext?

在使用Entity Framework的迁移命令时,是否可以配置/引导dependency injection? Entity Framework Core支持DbContext子类的dependency injection。 该机制包括允许在DbContext之外配置数据访问。 例如,以下内容将使用从config.json检索的连接字符串将EF配置为持久保存到SQL Server ServiceCollection services = … var configuration = new Configuration().AddJsonFile( “config.json” ); services.AddEntityFramework( configuration ) .AddSqlServer() .AddDbContext( config => config.UseSqlServer() ); 但是,迁移命令不知道执行此代码,因此由于缺少提供程序或缺少连接字符串, Add-Migration将失败。 通过在DbContext子类中重写OnConfiguring来指定提供者和配置字符串,可以使迁移工作,但是当其他地方需要不同的配置时,这会妨碍。 最终保持我的迁移命令和我的代码都工作变得非常复杂。 注意:我的DbContext与使用它的入口点不同,而且我的解决方案有多个启动项目。

EF Core添加迁移调试

如何使用断点进入OnModelCreating并查看我的逻辑是否错误或者模型构建器是否正在做我不期望的事情? 我已经看过很多关于如何调试实际迁移的post,但没有关于如何观察模型代码生成方式的内容。 我正试图在我的一些实体上实现一些自定义属性,并且它被忽略了; 我想知道我的配置正在做什么,因为它正在生成模型代码。

我应该把Database.EnsureCreated放在哪里?

我有一个Entity Framework Core + ASP.NET Core应用程序,当我的应用程序启动时,我想确保创建数据库,并最终(一旦我有迁移)我想确保它们也运行。 最初我将Database.EnsureCreated()放入我的DbContext的构造函数中,但是每次有人点击我的应用程序时它都会运行,因为DbContext都会创建一个新的DbContext实例。 我试着把它放到我的启动代码中,但我需要一个我的DbContext实例才能做到这一点,目前还不清楚如何获得一个。 我正在配置EF如下: serviceCollection.AddEntityFramework() .AddSqlServer() .AddDbContext(options => options.UseSqlServer(…)); 我没有看到从服务集合中获取DbContext实例的方法,我没有看到任何适当的单例来注入DbContext,所以我可以进行一次性初始化。 那么确保一些与我的DbContext相关的代码在每个应用程序运行时被调用一次的最佳位置是什么?

如何在EntityFrameworkCore 1.0 rc2中实现字段十进制(5,2)?

如何在EntityFrameworkCore 1.0 rc2实现字段decimal(5,2) ? HasPrecision似乎不再可用了吗?

显示原始值entity framework7

我有一个审计表,跟踪添加,删除和修改。 我在entity framework内跟踪这个而不是使用数据库触发器有多种原因,但实际上是因为我们使用了一个进程账户,我想跟踪用户物理上对该记录进行了哪些更改。 我有这个与EF 5合作,我不记得我可能已经在EF6工作了。 无论哪种方式,我都在努力尝试捕捉原始值。 我注意到,当我在观察时 – 我可以在非公众成员中看到原始价值 – 所以在我的脑海里,我知道它必须存在于某个地方。 最终这适用于EF早期版本: EntityEntry dbEntry; //this is actually passed in a different area just showing as an example. foreach (string propertyName in dbEntry.OriginalValues.PropertyNames) { // For updates, we only want to capture the columns that actually changed if (!object.Equals(dbEntry.OriginalValues.GetValue(propertyName), dbEntry.CurrentValues.GetValue(propertyName))) { result.Add(new TableChange() { AuditLogID = […]

EF Core 2.0标识 – 添加导航属性

在EF Core 2.0中,默认情况下不包含身份导航属性,因此在升级后,我添加了它们。 因此,对于用户和角色之间的多对多关系,以及Role和RoleClaim之间的一对多关系,我添加了以下导航属性: public class User : IdentityUser { [Required] public string Name { get; set; } public virtual ICollection<IdentityUserRole> Roles { get; set; } } public class Role : IdentityRole { [Required] public string Name { get; set; } public virtual ICollection<IdentityRoleClaim> Claims { get; set;} } 令人惊讶的是,它为AspNetRoleClaims表和UserId1向AspNetUserRoles表添加了一个额外的RoleId1键,并且所有获取查询实际上都使用新键而不是RoleId和UserId 。

如何在Entity Framework Core中传递具有多个级别的lambda’include’?

我有一个存储库,可以获取’include’的lambda表达式。 public TEntity FirstOrDefault(Expression<Func> predicate, params Expression<Func>[] includePaths) { return Context.Set().Includes(includePaths).FirstOrDefault(predicate); } 在以前的EF版本中,我在服务层使用它,例如: var plan = _unitOfWork.PlanRepository .FirstOrDefault( p => p.Id == id, include => include.PlanSolutions.Select(ps => ps.Solution) ); 其中’PlanSolutions’是一个集合,’Solution’是一个嵌套在’PlanSolution’中的属性。 但现在这段代码出错了: InvalidOperationException:属性表达式’include => {来自[include]中的PlanSolutions ps。.PlanSolutions select [ps] .Solution}’无效。 表达式应表示属性访问:’t => t.MyProperty’。 有关包含相关数据的详细信息,请参阅http://go.microsoft.com/fwlink/?LinkID=746393 。 现在似乎我不能使用’Select’方法获得多个级别包含,但我也不能使用Microsoft建议的’ThenInclude’方法,因为查询本身位于存储库内部,服务没有访问。 有没有办法治愈它?

Azure Functions .NET Core中的EF Core 2.0连接字符串

我使用.net核心在Azure Functions中使用EF core 2.0。 我正在尝试从local.settings.json读取db ConnectionString,其定义如下: { “IsEncrypted”: false, “Values”: { “AzureWebJobsStorage”: “UseDevelopmentStorage=true”, “AzureWebJobsDashboard”: “UseDevelopmentStorage=true” }, “ConnectionStrings”: { “MyDbConnStr”: “Data Source=.;Initial Catalog=xxxxxxx” } } Environment.GetEnvironmentVariable()不返回任何连接字符串信息,我也不能使用带有.net核心的ConfigurationManager.ConnectionStrings。 如何从代码中访问连接字符串?

实体类型上的导航尚未添加到模型中,或被忽略,或者实体类型被忽略

实体类型“Notepad.Models.Note”上的导航“标签”尚未添加到模型中,或被忽略,或者实体类型被忽略。 public class Note { public Note() { CreationDate = DateTime.Now; Tags = new HashSet(); Parts = new HashSet(); } public int ID { get; set; } public virtual ICollection Tags { get; set; } public virtual ICollection Parts { get; set; } public DateTime? CreationDate { get; set; } } public class Tag { […]