我有一个简单的数据库,其中有一张表,该表具有各种属性。
我正在使用最新的 .NET core 6 和最新的 EF (6.0.4)
我想构建我的数据库以便它生成模型,所以我运行命令:
dotnet ef dbcontext scaffold "Server=MyServerName;Database=MyDBName;User Id=sa;Password=abc123;"
Microsoft.EntityFrameworkCore.SqlServer -o Model --no-pluralize -d -f
Run Code Online (Sandbox Code Playgroud)
-d 命令应该使用数据注释而不是流畅注释,但事实并非如此。我最终得到一个MyTable类,其中清楚地列出了属性,例如public int MyTableId; public string MyTableProperty;....,然后在我的MyDBNameContext类OnModelCreating方法中,有几页这样的内容:
modelBuilder.Entity<MyTable>(entity =>
{
entity.HasIndex(e => e.SomeColumn, "idx_somecolumn");
entity.Property(e => e.firstcolumn)
.HasColumnType("decimal(8, 1)")
.HasColumnName("FirstColumn");
...
Run Code Online (Sandbox Code Playgroud)
这真是太可怕了。帮助中是这么说的:
-d|--data-annotations 使用属性来配置模型(如果可能)。如果省略,则仅使用 Fluent API。
我可以煞费苦心地手动完成并添加注释,但如果我将来由于更改而重新生成,那么它将撤消我的工作。
数据注释属性不起作用是否有原因?
.net scaffolding entity-framework-core entity-framework-migrations
我已在 Docker 上部署了 ASP.NET Core Web API。我的应用程序还与 Docker 容器中的 SQL Server 交互。
这是我的docker-compose.yml文件:
version: '3'
services:
db:
image: mcr.microsoft.com/mssql/server
container_name: db
ports:
- 1533:1433
environment:
- TZ=Asia/Tehran
- ACCEPT_EULA=Y
- MSSQL_SA_PASSWORD=******
user: root
volumes:
- ./mssql:/var/opt/mssql/data
kava-service:
image: service:1.0.0
container_name: service
expose:
- 9001
ports:
- 9001:9001
depends_on:
- db
environment:
- ASPNETCORE__ENVIRONMENT=Production
- TZ=Asia/Tehran
- AUTO__MIGRATE=true
- ConnectionStrings__BusinessDomainConnectionString=Server=db;Initial Catalog=Kava.BusinessDomain;User ID=sa;pwd=****;MultipleActiveResultSets=true;
- ConnectionStrings__RecordsConnectionString=Server=db;Initial Catalog=Kava.Records;User Id=sa;pwd=****;MultipleActiveResultSets=true;
Run Code Online (Sandbox Code Playgroud)
当我运行 docker 容器(使用docker-compose)时,它工作正常。但是,如果我重新启动此容器,它就不起作用,并且应用程序将退出并显示以下消息:
用户“sa”登录失败。原因:无法打开显式指定的数据库“Kava.BusinessDomain”[客户端:172.18.0.4] kava-service
未处理的异常。Microsoft.Data.SqlClient.SqlException(0x80131904):数据库“Kava.BusinessDomain”已存在。选择不同的数据库名称。
当我删除这个数据库时,一切正常,但我不想删除它。
在开发中(我的意思是 Visual Studio)一切都很好,但在生产中(Docker),迁移无法按预期进行。
这是我的迁移命令: …
c# docker entity-framework-core asp.net-core-webapi entity-framework-migrations
我目前正在为新数据库创建 InitialCreate 迁移。我是这个迁移框架的新手,不知道它到底生成了什么,我一直在运行update-database以查看结果,删除数据库然后update-database在进行一些更改以查看结果后再次运行。
现在我做了两次更改,去运行更新并收到如下错误:
应用基于代码的迁移:201209121936571_InitialCreate。System.Resources.MissingManifestResourceException: 找不到适合指定区域性或中性区域性的任何资源。确保在编译时将“$assemblyName$.resources”正确嵌入或链接到程序集“$assemblyName$”中,或者确保所有所需的附属程序集都是可加载的并已完全签名。在 [堆栈跟踪]
然后它以红色结尾
找不到适合指定文化或中性文化的任何资源。确保在编译时将“$assemblyName$.Migrations.InitialCreate.resources”正确嵌入或链接到程序集“$assemblyName$”中,或者确保所有所需的附属程序集都可加载且已完全签名。
我第一次遇到这个问题时,我删除了迁移文件夹,enable-migrations重新进行了更改并能够运行迁移。
它再次发生,我不想每次发生这种情况时都必须重新创建文件。有谁知道如何更正此问题以使迁移再次工作?
entity-framework entity-framework-5 entity-framework-migrations
运行以下命令时
pm> Update-Database
Run Code Online (Sandbox Code Playgroud)
出现以下错误
System.Reflection.TargetInitationException:调用目标已引发异常。---> System.TypeInitializationException:“System.Data.Entity.SqlServer.SqlProviderServices”的类型初始值设定项引发异常。---> System.TypeLoadException:程序集“EntityFramework.SqlServer,Version=6.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089”中类型“System.Data.Entity.SqlServer.DefaultSqlExecutionStrategy”中的方法“ExecuteAsync”没有执行。
c# asp.net-mvc-4 entity-framework-6 entity-framework-migrations
我正在使用空迁移来更新我的数据库中的存储过程。存储过程是在数据库的初始创建中添加的自定义存储过程。
我在 DbMigration 类中发现了“AlterStoredProcedure”方法,这可以更新存储过程,但是我必须传递存储过程的参数,并且我想将布尔值和一些整数的默认值设置为空,但我似乎无法让它发挥作用。
AlterStoredProcedure(
name: "[dbo].[FT_People_PersonFullTextSearch]",
parametersAction:
p => new {
searchTerm = p.String(600),
isArchived = p.Boolean(false),
isActive = p.Boolean(null),
genderFilter = p.Int(null),
rankingFilter = p.Int(null)
},
body: "the body of my stored proc....");
Run Code Online (Sandbox Code Playgroud)
上面的代码产生
ALTER PROCEDURE [dbo].[FT_People_PersonFullTextSearch]
@searchTerm [nvarchar](600),
@isArchived [bit] = 0,
@isActive [bit],
@genderFilter [int],
@rankingFilter [int]
AS
BEGIN
Run Code Online (Sandbox Code Playgroud)
代替
ALTER PROCEDURE [dbo].[FT_People_PersonFullTextSearch]
@searchTerm nvarchar(600),
@isArchived bit = 0,
@isActive bit = null,
@genderFilter int = null,
@rankingFilter int = null
AS
BEGIN
Run Code Online (Sandbox Code Playgroud)
有谁知道如何获取要生产的参数@isActive bit …
我制作了一张表格,将商店与 Table1 或 Table2(和其他信息)相关联
Id
IdStore_FK
IdTable1_FK
IdTable2_FK
SomeOtherFieldsThatDoesntMatterRightNow
Run Code Online (Sandbox Code Playgroud)
我创建了一个检查约束以确保它永远不会同时填充两个 FK,并且必须只填充其中一个(XOR):
ALTER TABLE TABLE0 ADD CHECK ((IdTable1_FK IS NULL AND IdTable2_FK IS NOT NULL) OR (IdTable1_FK IS NOT NULL AND IdTable2_FK IS NULL))
Run Code Online (Sandbox Code Playgroud)
但是我在和之后alter table 手动运行了它。我需要仅使用代码来制定这些限制,以便能够发送给我的经理。add-migrationupdate-database
我试图modelBuilder.Sql("ALTER TABLE XXX....")在Up特定迁移的方法中添加。我只能在add-migration创建文件的之后将该行添加到迁移文件中。
每次启动后的种子查询检查约束是否存在,如果不存在则创建它对我来说似乎并不酷。此外,它只会在我运行代码时运行,而不是与迁移/更新数据库一起运行。
.net c# entity-framework .net-core entity-framework-migrations
我在用 EF Core 2.1
如何在 EF Core 中映射一对一关系。我有Customer&Course域实体,其中一位客户将拥有一门课程。
这就是我的 Customer & CoursePOCO 的样子。
public class Customer
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Course
{
public int Id { get; set; }
public string CouseName { get; set; }
public virtual Customer Customer { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我正在使用 FluentAPI。
public class CourseConfiguration : IEntityTypeConfiguration<Course>
{
public void Configure(EntityTypeBuilder<Parent> builder)
{
builder.HasKey(x => x.Customer.Id) //not …Run Code Online (Sandbox Code Playgroud) c# entity-framework-core asp.net-core ef-core-2.1 entity-framework-migrations
根据文档,EF Core SQLite 不支持使用迁移进行数据库开发的一些基本操作(例如删除列、设置外键等)。那么如何执行简单的数据库结构更改,例如在不丢失数据的情况下删除列并保持快照模型与数据库同步(无脚手架)?
是否值得付出努力,还是我应该先使用数据库并为模型使用脚手架命令更新?如果我不能在迁移中执行所有必要的操作来更新我的数据库,那么我就不能利用迁移的好处来恢复我的数据库结构。那么在 EF-Core-Sqlite 中使用迁移的优势在哪里呢?ORM 应该减少工作,而不是使工作变得更加困难。
c# sqlite entity-framework entity-framework-core entity-framework-migrations
我通过从表中删除一列到另一列来更新我的数据模型,但我在此列中有数据
为此,我首先在新表中添加新列并完成。
现在我想将列数据从旧表迁移到新表,我正在考虑在Up(MigrationBuilder migrationBuilder)方法中进行但我不知道正确的方法。
所以,我问是否有人知道我可以从哪里开始。
谢谢你们!
c# entity-framework-core ef-model-builder entity-framework-migrations
我的DbContext. 当从它继承时,我需要生成一个额外的“SQL”迁移操作来为它创建一个特定的触发器。它通过检查重叠范围来确保表结构是一致的。由于在 SQL Server 中没有重叠的索引或检查约束,我必须使用触发器(在检查约束中使用函数会导致与迁移相同的问题以及 SQL 中的混乱函数“命名空间”)。
由于我在OnModelCreating考虑更改生成的迁移期间没有找到任何创建触发器的方法。但是怎么做呢?
尝试使用SqlServerMigrationsSqlGeneratorand SqlServerMigrationsAnnotationProvider,但顾名思义,它们仅在生成 SQL 命令期间的最后阶段使用。这使得它们在使用迁移时有点“隐藏”。在需要时难以定制并在之后进行维护。
考虑使用CSharpMigrationOperationGenerator这似乎非常适合我的需求。但是有一个问题 - 我无法访问这个类。也不是命名空间。
根据来源,此类驻留在Microsoft.EntityFrameworkCore.Migrations.Design命名空间中并且是公共的。为了访问它Microsoft.EntityFrameworkCore.Design,必须安装一个包。
但它不起作用。
我在这里缺少什么?如何访问和继承这个类?或者也许有更好和正确的方法在特定表的迁移期间自动创建触发器?
c# sql-server entity-framework-core asp.net-core entity-framework-migrations
entity-framework-migrations ×10
c# ×8
.net ×2
asp.net-core ×2
.net-core ×1
docker ×1
ef-core-2.1 ×1
scaffolding ×1
sql-server ×1
sqlite ×1