我正在使用MVC 4,我必须使用Code First Migrations更新我的数据库.我要做的是从数据库表中选择记录,并将它们插入下拉列表,用户可以在其中选择一个.
我有一个我不明白的错误:
LINQ to Entities does not recognize the method 'System.String ToString()' method, and this method cannot be translated into a store expression.
控制器:
public ActionResult Addnew()
{
var dba = new DefaultConnection();
var query = dba.blob.Select(c => new SelectListItem
{
Value = c.id.ToString(),
Text = c.name_company,
Selected = c.id.Equals(3)
});
var model = new Companylist
{
xpto = query.AsEnumerable()
};
return View(model);
}
Run Code Online (Sandbox Code Playgroud) 在EF项目中,是否有设置AutomaticMigrationsEnabled的最佳实践?
更多声明:
在我们的团队修改模型后,我们通常在Package Manager Console中运行"add-migration"和"update-databse"命令.当其他开发人员运行该项目时,会出现此错误:
"无法删除数据库,因为它正在使用中"
每次发生这种情况时,第一个修饰符应该是Check In整个项目而其他修饰符必须GET修改对象.在许多情况下,我们不想检查已经创建的模型和迁移!
这种情况很烦人,有没有解决这类问题的方法.提前致谢.
我们正在使用TFS并为我们的Dev提供不同的分支.
在分支A中,我们进行了迁移以更改列大小
在分支B中,我们进行了迁移以添加新表.这个分支不知道分支A修改!!
两个修改都合并到主分支.
当我执行更新数据库时,它执行2迁移,但最后告诉我有待更改.如果我执行Add-Migration,它将创建与第一次迁移相同的(在分支A中).
无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.
是因为我上一次迁移的属性Target de IMigrationMetadata的内容中缺少某些东西,因为它不知道第一次迁移?
是否可以处理不同TFS分支中的迁移?
.net coldfusion entity-framework ef-code-first ef-migrations
我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.
我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_name和column_name,但我一直没能正确地写代码.
请不要向我推荐AuditDbContext - 实体框架审计上下文或EntityFramework.Extended工具,因为它们不能满足我的需要.
UPDATE
我CreatedDate是空的SaveChanges()因为我将ViewModel传递给我的视图,它正确地没有调用其中的审计属性CreatedDate.即使我将模型传递给我的视图,我也不会CreatedDate在视图中编辑或存储它.
我在这里读到我可以添加[DatabaseGenerated(DatabaseGeneratedOption.Identity)],这将告诉EF CreatedDate在插入和更新后正确存储,但不允许我的应用程序更改它:但我只是Cannot insert explicit value for identity column in table when IDENTITY_INSERT is set to OFF通过添加此属性得到错误.
我即将切换到EF Model First,因为这个简单的数据库要求在Code First中实现是荒谬的.
entity-framework code-first ef-code-first ef-migrations entity-framework-5
我们有三个项目.
这两个网站项目都参考了Company.Domain.
我们的EF 5 DbContext住在里面Company.Domain.Data.EntityFramework,它看起来像这样:
using System.Data.Entity;
using Company.Domain.Data.EntityFramework.Entities;
namespace Company.Domain.Data.EntityFramework.
{
public class CompanyEntities : DbContext
{
public DbSet<Notification> Notifications { get; set; }
public DbSet<Report> Reports { get; set; }
public DbSet<ReportSection> ReportSections { get; set; }
public DbSet<ReportPage> ReportPages { get; set; }
// brevity brevity
}
}
Run Code Online (Sandbox Code Playgroud)
我们已经启用了迁移并且过去成功使用了该工具,因此我不确定为什么我们现在遇到问题.我们的迁移配置存在,Company.Domain.Data.EntityFramework.Migrations如下所示:
namespace Company.Domain.Data.EntityFramework.Migrations
{
using System;
using System.Data.Entity;
using System.Data.Entity.Migrations;
using System.Linq;
using Company.Domain.Data.EntityFramework;
public class …Run Code Online (Sandbox Code Playgroud) c# entity-framework ef-code-first ef-migrations entity-framework-5
我可以使用包管理器在本地运行'update-database -verbose'.
可能是一个愚蠢的问题,但我无法在线找到它 - 一旦部署了我的网站 - 我怎样才能在服务器上手动运行?
其次 - 您建议将数据库迁移部署到生产中的其他策略是什么?它们将如何更好?
谢谢
asp.net-mvc entity-framework asp.net-mvc-4 ef-migrations entity-framework-5
我正在使用Entity Framework 5.0 Code First Migrations,并且遇到运行Update-Database的问题.它说有待更改的模型; 但它应该是最新的,所以我跑了
Add-Migration SomeMigrationName
Run Code Online (Sandbox Code Playgroud)
并且它创建了一个文件...但是,它创建的文件与先前的迁移基本相同(如果我再次尝试在该文件上更新数据库,则会因尝试删除非文件而失败)存在的约束).此外,我已经能够确认已经根据数据库中的数据模型以及__MigrationHistory表中的记录的存在运行了"原始"迁移!
如果我删除整个数据库,并自动或手动再次运行所有迁移,我遇到同样的问题.
我拥有的"原始"迁移文件如下:
public partial class RenameLinkColumns : DbMigration
{
public override void Up()
{
DropForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User");
DropIndex("dbo.Listing", new[] { "OfferedByUserId" });
AddColumn("dbo.Listing", "ListedByUserId", c => c.Int(nullable: false));
AddForeignKey("dbo.Listing", "ListedByUserId", "dbo.User", "UserId", cascadeDelete: true);
CreateIndex("dbo.Listing", "ListedByUserId");
DropColumn("dbo.Listing", "OfferedByUserId");
}
public override void Down()
{
AddColumn("dbo.Listing", "OfferedByUserId", c => c.Int(nullable: false));
DropIndex("dbo.Listing", new[] { "ListedByUserId" });
DropForeignKey("dbo.Listing", "ListedByUserId", "dbo.User");
DropColumn("dbo.Listing", "ListedByUserId");
CreateIndex("dbo.Listing", "OfferedByUserId");
AddForeignKey("dbo.Listing", "OfferedByUserId", "dbo.User", "UserId", cascadeDelete: true);
}
} …Run Code Online (Sandbox Code Playgroud) 使用代码优先迁移向表中添加新的非可空列时,它将自动为您创建默认值.这是有道理的,因为现有行需要具有新列的值(因为它不能为null).那很好,但是在那个值分配到处之后,我不再需要了.它是不可空的,因为我想确保始终显式插入值.如果一切都默认为''或0,那么我将拥有魔术字符串.所以无论如何,我可以提出一个解决方案,我并不感到兴奋,但它确实有效.
添加列后,我删除默认约束.
public override void Up()
{
AddColumn("dbo.SomeTable", "NewColumn", c => c.Int(nullable: false));
Sql(Helpers.DropDefaultConstraint("dbo.SomeTable", "NewColumn"));
}
Run Code Online (Sandbox Code Playgroud)
...
public static string DropDefaultConstraint(string table, string column)
{
return string.Format(@"
DECLARE @name sysname
SELECT @name = dc.name
FROM sys.columns c
JOIN sys.default_constraints dc ON dc.object_id = c.default_object_id
WHERE c.object_id = OBJECT_ID('{0}')
AND c.name = '{1}'
IF @name IS NOT NULL
EXECUTE ('ALTER TABLE {0} DROP CONSTRAINT ' + @name)
",
table, column);
}
Run Code Online (Sandbox Code Playgroud)
PROS:一旦实现了辅助方法,我只需要添加一条简单的行来删除约束.缺点:似乎没有必要创建索引只是为了删除它.
另一种方法是改变生成的迁移,因此我们添加它可以为空,更新所有值,然后使其不可为空.
public override void Up()
{
AddColumn("dbo.SomeTable", "NewColumn", c …Run Code Online (Sandbox Code Playgroud) 我最近从MSDN升级到Visual Studio 2012 RTM Ultimate.我正在使用EF Code First Migrations在我的应用程序中构建我的数据库,最近我添加了一个新实体,并希望为它进行迁移.
为此,您需要在VS中打开"包管理控制台"窗口,然后键入add-migration "some name here".这将自上次更新以来对数据库进行任何更改.
VS 2012 RC上未发生此问题
我遇到的问题是,尽管我的解决方案中有多个项目,但未填充程序包管理器控制台中的"默认项目"下拉列表.我在上面输入命令时使用的默认项目是错误的项目(我的迁移在另一个项目中).我这样做时收到以下错误:
在程序集"ProjectA"中未找到任何迁移配置类型.(在Visual Studio中,您可以使用程序包管理器控制台中的"启用 - 迁移"命令添加迁移配置).

我已经尝试将正确的项目(ProjectB)设置为启动项目,只是为了得到这个错误:
无法加载程序集"ProjectA".(如果在Visual Studio中使用Code First Migrations,如果解决方案的startUp项目未引用包含迁移的项目,则可能会发生这种情况.您可以更改解决方案的startUp项目或使用-StartUpProjectName参数.)
如何手动指定要添加的项目迁移,或强制"默认项目"下拉列表填充?
我正在使用代码首次迁移.在构建新的迁移之前,有没有办法在包管理器控制台中显示挂起的模型更改?
ef-migrations ×10
c# ×4
.net ×2
asp.net-mvc ×2
asp.net ×1
code-first ×1
coldfusion ×1
nuget ×1
t-sql ×1