标签: entity-framework-migrations

如何确定 IEntityTypeConfiguration 处的数据库提供程序,因为我支持多个数据库

谁能告诉我如何在第 9 行获取当前的数据库提供程序?因此它可以为MySQL迁移正确生成迁移。我该如何以干净的方式做到这一点。

1 internal class GroupConfiguration : IEntityTypeConfiguration<Group>
2 {
3   public void Configure(EntityTypeBuilder<Group> builder)
4   {
5      builder.ToTable(nameof(Group));
6      builder.HasKey("Id");
7      builder.Property(u => u.Id)
8         .ValueGeneratedOnAdd()
9         .HasDefaultValueSql((database.IsMySql()) ? "uuid()" : "newsequentialid()");
...
Run Code Online (Sandbox Code Playgroud)

我正在使用 .NET Core 3.1,并且我的 web 应用程序支持多个数据库提供程序。目前是 MySQL (Pomelo) 和 SQL Server。我需要它以正确的方式生成迁移。所以我有 MySQL 和 SQL Server 迁移。

但我不想手动更新 MySQL 生成的迁移。

mysql sql-server asp.net-core-mvc entity-framework-migrations

2
推荐指数
1
解决办法
604
查看次数

InvalidDataAccessApiUsageException:无法将 [Facility] 类型的测试表达式与 [basicType@4(java.lang.Integer,4)]] 类型的元素进行比较

[dispatcherServlet] in context with path [] threw exception [Request processing failed: org.springframework.dao.InvalidDataAccessApiUsageException: Can't compare test expression of type [Facility] with element of type [basicType@4(java.lang.Integer,4)]] with root cause
java.lang.IllegalArgumentException: Can't compare test expression of type [Facility] with element of type [basicType@4(java.lang.Integer,4)]
    at org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.assertComparable(SqmCriteriaNodeBuilder.java:2098)
    at org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.equal(SqmCriteriaNodeBuilder.java:2121)
    at org.hibernate.query.sqm.internal.SqmCriteriaNodeBuilder.equal(SqmCriteriaNodeBuilder.java:182)
    at com.freit.medicalservice.repository.specification.PatientSpecification.lambda$facilityIdEqual$2a154287$1(PatientSpecification.java:139)
    at org.springframework.data.jpa.domain.SpecificationComposition.toPredicate(SpecificationComposition.java:62)
    at org.springframework.data.jpa.domain.SpecificationComposition.lambda$composed$e1dcbe07$1(SpecificationComposition.java:49)
    at org.springframework.data.jpa.domain.SpecificationComposition.toPredicate(SpecificationComposition.java:62)
Run Code Online (Sandbox Code Playgroud)

在我从 spring 及其相关包(包括 JPA、Hibernate)从版本 5 迁移到版本 6 后,我在 JPA 规范上遇到了这个愚蠢的错误,这两天一直困扰着我。

我遇到错误的线路;

public static Specification<Patient> facilityIdEqual(Integer facilityId) {
        return (root, query, builder) -> {
            if (facilityId != …
Run Code Online (Sandbox Code Playgroud)

hibernate jpa spring-data-jpa spring-boot entity-framework-migrations

2
推荐指数
1
解决办法
4110
查看次数

将 Entity Framework Code First 与 mysql 一起使用时强制 engine=innodb

我使用实体框架 6 和 msyql 数据库创建了一个新的 .NET MVC 5 Web 应用程序。我首先使用代码/模型。数据库服务器有一个默认的存储引擎 MyISAM,但我希望 EF 创建的表是 InnoDb。有谁知道是否有办法指定 EF 将在CREATE TABLE语句中使用的存储引擎?

mysql asp.net-mvc entity-framework entity-framework-6 entity-framework-migrations

1
推荐指数
1
解决办法
1279
查看次数

如何在 ASP.NET 实体框架中设置删除级联以实现自引用外键

我正在开发一个 ASP.NET MVC 项目。我正在使用实体框架代码优先方法与数据库交互。但我在为实体的自引用外键设置级联删除时遇到问题。

这是我的带有自引用外键的实体类

public class Category
    {
        public int Id { get; set; }
        [Required]
        [MaxLength(50)]
        public string Name { get; set; }
        [MaxLength(55)]
        public string MmName { get; set; }
        public int? ParentId { get; set; }

        [ForeignKey("ParentId")]
        public virtual Category ParentCategory { get; set; }
        public virtual ICollection<Category> Categories { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

这是我的背景

public class StoreContext : DbContext
    {
        public StoreContext():base("DefaultConnection")
        {

        }

        public DbSet<Category> Categories { get; set; }

        protected override void OnModelCreating(DbModelBuilder …
Run Code Online (Sandbox Code Playgroud)

asp.net entity-framework foreign-keys ef-code-first entity-framework-migrations

1
推荐指数
1
解决办法
2138
查看次数

启用迁移时出现关键字不支持错误

我有一个 dbcontext 类,我在其中初始化了 4 个 dbset。我的连接字符串是

  <connectionStrings>
    <add name="somename" connectionString="Data Source=.; initial catalog=someDb; user ID=ab; Password:111111; MultipleActiveResultSets=True;"  providerName="System.Data.SqlClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

我的 dbcotext 类是

public AstroEntities(): base("somename")
        {
            Database.SetInitializer<AstroEntities>(new CreateDatabaseIfNotExists<AstroEntities>());
        }
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<Contact>().ToTable("Contacts");
            modelBuilder.Entity<Appointment>().ToTable("Appointments");
            modelBuilder.Entity<Consultation>().ToTable("Consultations");
            modelBuilder.Entity<HomePageMessage>().ToTable("HomePageMessages");
            base.OnModelCreating(modelBuilder);
        }
        public DbSet<Contact> Contacts { get; set; }
        public DbSet<Appointment> Appointments { get; set; }
        public DbSet<Consultation> Consultations { get; set; }
        public DbSet<HomePageMessage> Homepagemessages { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

当我启用自动迁移时,我收到如下错误

“不支持关键字:‘密码:111111;多个活动结果集’。”

有人能说有什么问题吗?

asp.net-mvc entity-framework entity-framework-migrations

1
推荐指数
1
解决办法
2977
查看次数

实体框架代码优先重写 onModelCreating() 以实现 TPT 继承搞砸身份用户和角色模型

我在将 Fluent API 扩展到我的继承类时遇到问题。我采用了TPT(table per type)方法,每个类型的继承都有一个表。我喜欢每种类型的表,因为数据库完全规范化并且易于维护。我在覆盖本文指示我执行的onModelCreating方法时遇到错误。它正在丢失用户和角色实体的密钥。

基础抽象类

namespace Home_Warranty.Models
{
    public abstract class Vendor
    {
        [Key]
        public int VendorID { get; set; }

        [Required]
        public string CompanyName { get; set; }

        [Required]
        public int StreetNumber { get; set; }

        [Required]
        public string StreetName { get; set; }

        }
}
Run Code Online (Sandbox Code Playgroud)

从供应商继承的 ServiceCompany 类

namespace Home_Warranty.Models
 {
 [Table("ServiceCompanies")]
 public class ServiceCompany : Vendor
 {
    public string ACHClaim { get; set; }

    public virtual ICollection<SubContractorCompany> SubContractorCompanies{ get; set; } …
Run Code Online (Sandbox Code Playgroud)

linq inheritance linq-to-entities entity-framework entity-framework-migrations

1
推荐指数
1
解决办法
7500
查看次数

'字符串参数 'migrationId' 不能为空。'

因奇怪的错误而被阻止。我在一个 asp.net 核心 Web 应用程序中工作,并在其中使用 EF 核心 1.1.0。

EF 数据库迁移引发错误“字符串参数‘migrationId’不能为空。” 尝试执行以下命令时

dbcontext.Database.Migrate();
Run Code Online (Sandbox Code Playgroud)

链接中执行了接受的答案,但没有解决我的问题。

Uninstall donet 2.0.0, installed 1.1.0 and restarted PC. Still i am getting the same error.
Run Code Online (Sandbox Code Playgroud)

任何人都可以帮我解决这个问题。

entity-framework .net-core asp.net-core-1.1 entity-framework-migrations

1
推荐指数
1
解决办法
1675
查看次数

ORA-12154: TNS: 无法解析指定的连接标识符 Entity 6 MVC Code First

我正在尝试在visiual stdio 2015 中的MVC Code-First c# 项目上启用迁移。我安装了oracle 11g odt 和客户端两台机器,我做了相同的安装,并在我的xe 数据库上创建了一个架构。两台机器是相同的 tns 文件,但其中一台在 oracle 数据库上进行了迁移,其中一台没有。我做了所有的事情,但我无法解决 ORA-12154 问题。

这个我的 TNS 文件位于 oracle 客户端和 oracexe 和 dbcontext

XE = 
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = LOCALHOST)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = XE)
      (SRVR = DEDICATED)
    )
  )


ORCL = 
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 10.11.0.234)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = orcl)
    )
  )

this is my dbcontext

using System; …
Run Code Online (Sandbox Code Playgroud)

c# oracle asp.net-mvc entity-framework-migrations

1
推荐指数
1
解决办法
2514
查看次数

实体框架核心迁移不能与类库一起使用吗?

我有一个 ASP.NET 核心项目“Api”,其目标是:

<TargetFramework>net471</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

该项目引用另一个类库项目“Repository”,目标为:

<TargetFramework>netstandard1.4</TargetFramework>
Run Code Online (Sandbox Code Playgroud)

“Api”项目的配置如下:

services
.AddEntityFrameworkSqlServer()
.AddDbContext<ApplicationDbContext>(options =>
    options.UseSqlServer(Configuration.GetConnectionString("DefaultConnection"),
    b => b.MigrationsAssembly("Repository"))
)
.AddScoped(p => new ApplicationDbContext(p.GetService<DbContextOptions<ApplicationDbContext>>()));
Run Code Online (Sandbox Code Playgroud)

当我在 PMConsole 中时,我输入:

添加-迁移初始

然后我得到这个错误:

Microsoft.AspNetCore.DataProtection.KeyManagement.XmlKeyManager[0]
add-migration : Exception calling "Substring" with "1" argument(s): "StartIndex cannot be less than zero.
Parameter name: startIndex"
At line:1 char:1
+ add-migration
+ ~~~~~~~~~~~~~
    + CategoryInfo          : NotSpecified: (:) [Add-Migration], MethodInvocationException
    + FullyQualifiedErrorId : ArgumentOutOfRangeException,Add-Migration
Run Code Online (Sandbox Code Playgroud)

我有什么错吗?

entity-framework-core asp.net-core-2.0 entity-framework-migrations

1
推荐指数
1
解决办法
2799
查看次数

带有过滤器的ApplyConfigurationsFromAssembly Entityframework Core

我需要使用特定类型的实体创建数据库上下文,因为我在解决方案上有多个数据库上下文。我的问题是OnModelCreating我们从程序集中应用配置builder.ApplyConfigurationsFromAssembly(Assembly.GetExecutingAssembly())所以我想仅使用IEntityTypeConfiguration具有基本模型的实体的类型来应用配置BaseEntity,如下所示

public class DaysOfWeekBuilder : IEntityTypeConfiguration<DaysOfWeek>
{
    public void Configure(EntityTypeBuilder<DaysOfWeek> builder)
    {
        builder.ToTable("DaysOfWeek");
        builder.Property(e => e.Name).HasMaxLength(15);
    }
}
Run Code Online (Sandbox Code Playgroud)

所以DaysOfWeek实体有基类BaseEntity

public class DaysOfWeek : BaseEntity
{
    public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我们如何 IEntityTypeConfiguration使用具有基本模型的实体进行过滤BaseEntity

谢谢

c# dbcontext entity-framework-core asp.net-core entity-framework-migrations

1
推荐指数
1
解决办法
960
查看次数