我正在尝试找出将迁移降低到空数据库的语法,就像在初始创建迁移中调用down方法一样.有没有人知道在迁移中调用Down方法的正确语法类似于:
Update-Database -StartupProjectName "Infrastructure.Data" -TargetMigration 0
Run Code Online (Sandbox Code Playgroud) 最近开始使用Code First Migrations并且希望在每个Up方法中播种数据.
这可能吗?
IE浏览器.
丢弃:
我正在使用EF电源工具的Beta 3 for EF5.0对现有数据库进行逆向工程.
当我从项目上下文菜单中选择"Reverse engineer code first"时,我会按预期获得所有模型和DBContexts +映射.一切看起来都不错.
逆向工程过程完成后,我立即成功启用了迁移.
但是我想为其中一个模型添加一个新属性.添加新属性后,
我运行PM> Add-Migration AddMyPropertyToMyTable
创建迁移文件,
如果我然后尝试PM>更新数据库
我收到一个错误,告诉我表已经存在.
我按照这里的教程:> http://msdn.microsoft.com/en-us/data/jj200620
为什么我收到此错误?当然桌子存在,我只是逆向设计它
我是否应该在逆向工程后删除数据库?或者在反向工程Db的情况下,我是否必须对实际数据库进行更改并再次重新设计它以在项目中获得所需的更改(那么首先是逆向工程的重点是什么?)
教程中是否缺少某些内容,即在模型更改后使数据库可更新所需的额外步骤?
所以我使用Entity Framework Code First在现有的远程SQL Server数据库中创建表,当我这样做时:
Enable-Migrations
Add-Migration Inital
Update-Database
Run Code Online (Sandbox Code Playgroud)
不会创建任何表.这是我的DbContext:
using Microsoft.AspNet.Identity.EntityFramework;
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using TrabalhoDefinitivo.Models;
using TrabalhoDefinitivo.ViewModels;
namespace TrabalhoDefinitivo.DAL
{
public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public DbSet<Sale> Sales { get; set; }
public DbSet<Album> Albums { get; set; }
public DbSet<AlbumType> AlbumTypes { get; set; }
public DbSet<SaleAlbum> SaleAlbums { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试在Web.config中添加一个新的连接字符串manuall:
<add name="ApplicationServices"
connectionString="Data Source=gandalf.dei.isep.ipp.pt\sqlexpress;
Initial Catalog=xxxx;
User ID=xxxx;
Password=xxxx"
providerName="System.Data.SqlClient" …Run Code Online (Sandbox Code Playgroud) 我正在尝试使用MySQL数据库(ef代码第一种方法,VS 2013专业版).我按照这些说明操作.
我的问题是,在启用迁移后,我无法进行首次迁移.我使用命令Add-migration migrationName,我收到一个错误:
"System.NullReferenceException:对象引用未设置为对象的实例.在MySql的System.Data.Entity.Core.Common.DbProviderServices.GetProviderManifestToken(DbConnection连接)的MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(DbConnection连接)处.Data.Entity.MySqlManifestTokenResolver.ResolveManifestToken(DbConnection连接)...
你调用的对象是空的.".
"这可能是因为没有为您正在使用的方案指定必需参数.例如,指定连接字符串而不指定提供程序名称."
所以问题可能出在我的连接字符串中.
我有来自VS> Server Explorer的连接字符串,我的数据库有"活动"连接.我查看了连接属性并将连接字符串复制到我的web.config中.
在我的项目中引用了MySql.Data,MySql.Data.Entity.EF6和MySql.Web.
任何人有任何想法我该怎么办?
我需要支架移植与add-migration从包管理器控制台与我的自定义迁移基地CustomMigration,其源自DbMigration。
public partial class NewMigration: CustomMigration
{
public override void Up()
{
}
public override void Down()
{
}
}
Run Code Online (Sandbox Code Playgroud)
如果需要,我可以使用其他命令。我在Powershell脚本编写方面没有任何技能。我怎样才能做到这一点?
我正在尝试使用本教程学习ASP.NET Core的基础知识:
现在,我尝试使用dotnet ef migrations add Initial项目文件夹中的命令提示符(project.json所在的位置)设置数据库迁移:
找不到匹配命令"dotnet-ef"的可执行文件
我更改了project.json,以便dotnet-ef工作:
"tools": {
...
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.0.0-preview1-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
Run Code Online (Sandbox Code Playgroud)
现在,生成失败,出现以下错误:
找不到指定的框架"Microsoft.NETCore.App",版本"1.0.0-rc2-3002702". - 检查应用程序依赖项并定位安装在以下位置的框架版本:C:\ Program Files\dotnet\shared\Microsoft.NETCore.App - 安装了以下版本:1.0.0 1.0.1 1.1.0 - 或者,安装框架版本'1.0.0-rc2-3002702'
好吧,这是有道理的,因为Microsoft.EntityFrameworkCore.Tools 1.0.0-preview1-final依赖于错误中提到的旧版本,如project.lock.json文件中所示.
我不想降级,所以我把最新版本的Microsoft.EntityFrameworkCore.Tools我找到:
"Microsoft.EntityFrameworkCore.Tools": {
"version": "1.1.0-preview4-final",
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
},
Run Code Online (Sandbox Code Playgroud)
这样做会导致同样的错误:
找不到匹配命令"dotnet-ef"的可执行文件
如何在1.1版中使其工作?
其他可能有用的上下文信息:
操作系统:Windows 7 x64 VS:2015 Community Edition来自project.json的其他部分:
"frameworks": {
"netcoreapp1.1": {
"imports": [
"portable-net45+win8+dnxcore50",
"portable-net45+win8"
]
}
},
"runtimes": { …Run Code Online (Sandbox Code Playgroud) 我在班上改名了。看起来像这样。
public class clsClassForStackoverflow
{
[Column(TypeName = "varchar"), StringLength(150)]
public string Name { get; set; }
Run Code Online (Sandbox Code Playgroud)
由于结构上的更改,我不得不将其重命名。因此,我删除了该行并添加了新属性。之后,我创建了一个新的迁移文件来准备数据库更新,他想在该文件中删除旧列并添加新列。好吧,因为数据库中仍然有数据,所以将其更改为重命名。一滴一滴,它将消失。
新的迁移文件:
public partial class _100126_2 : DbMigration
{
public override void Up()
{
RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_Name", "ClassForStackoverflow_NewName");
}
public override void Down()
{
RenameColumn("dbo.tbClassForStackoverflow", "ClassForStackoverflow_NewName", "ClassForStackoverflow_Name");
}
}
Run Code Online (Sandbox Code Playgroud)
启动数据库更新后,我查看了我的课程,并且属性没有改变。它仍然命名为“名称”,而不是“ NewName”。在没有让EF认为自己删除并添加一列的情况下,我该如何更改?
我一直在使用标准的添加迁移方法来更新我在Entity Framework上的aspnet核心数据库。现在,我必须将两个“图像”列移动到新表(及其图像数据)中,从原始表中删除这些列,并在新旧表之间建立外键关系。我有一个有效的SQL脚本来完成所有这些工作。
在正常的EF迁移中,如何执行此sql脚本,并确保后续的add-migration更改将反映我的sql脚本将进行的更改(添加新表/列,从原始表中删除图像列)?
我已经看到了一些对SqlFile的引用,这些引用是从DbMigration派生的,但是没有任何一个适合我的情况。我正在使用EF Core,aspnet core 2.0。
我有一个现有表Projects,我想向其中添加一个UserId列,其中UserId有一个外键。 Projects现在有一个名称列表,但我希望每个用户都可以管理自己的项目。我最初拥有“孤儿”是可以的,因为列表足够小,我可以手动清理它们。
我已经更新了模型以包含UserId和导航属性User(可能不相关,但是Entity这里是带有Id和的基类DateModified)
public class Project : Entity
{
public string Name { get; set; }
public Guid? UserId { get; set; } //tried this as nullable and non nullable
public User User { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我相关的映射文件是
public class ProjectMap : IEntityTypeConfiguration<Project>
{
public void Configure(EntityTypeBuilder<Project> builder)
{
builder.Property(x => x.Name).IsRequired();
builder.Property(x => x.UserId).IsRequired();
builder.HasOne(x => x.User)
.WithMany(x => x.Projects)
.HasForeignKey(x …Run Code Online (Sandbox Code Playgroud)