标签: ef-migrations

LINQ to Entities无法识别MVC 4中的方法'System.String ToString()'方法

我正在使用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)

c# asp.net asp.net-mvc asp.net-mvc-4 ef-migrations

33
推荐指数
1
解决办法
5万
查看次数

AutomaticMigrationsEnabled为false还是true?

在EF项目中,是否有设置AutomaticMigrationsEnabled的最佳实践?

更多声明:

在我们的团队修改模型后,我们通常在Package Manager Console中运行"add-migration"和"update-databse"命令.当其他开发人员运行该项目时,会出现此错误:

"无法删除数据库,因为它正在使用中"

每次发生这种情况时,第一个修饰符应该是Check In整个项目而其他修饰符必须GET修改对象.在许多情况下,我们不想检查已经创建的模型和迁移!

这种情况很烦人,有没有解决这类问题的方法.提前致谢.

entity-framework entity-framework-4 ef-migrations

32
推荐指数
2
解决办法
4万
查看次数

在不同的TFS分支上工作时会丢失EF Code First Migration吗?

我们正在使用TFS并为我们的Dev提供不同的分支.

  1. 在分支A中,我们进行了迁移以更改列大小

  2. 在分支B中,我们进行了迁移以添加新表.这个分支不知道分支A修改!!

  3. 两个修改都合并到主分支.

当我执行更新数据库时,它执行2迁移,但最后告诉我有待更改.如果我执行Add-Migration,它将创建与第一次迁移相同的(在分支A中).

无法更新数据库以匹配当前模型,因为存在挂起的更改并且已禁用自动迁移.将挂起的模型更改写入基于代码的迁移或启用自动迁移.将DbMigrationsConfiguration.AutomaticMigrationsEnabled设置为true以启用自动迁移.您可以使用Add-Migration命令将挂起的模型更改写入基于代码的迁移.

是因为我上一次迁移的属性Target de IMigrationMetadata的内容中缺少某些东西,因为它不知道第一次迁移?

是否可以处理不同TFS分支中的迁移?

.net coldfusion entity-framework ef-code-first ef-migrations

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

使用Entity Framework 5 Code First将CreatedDate添加到实体

我正在尝试向CreatedDate我的模型中的实体添加属性,并且正在使用EF5 Code First.我希望这个日期一旦设置就不会改变,我希望它是一个UTC日期.我不想使用构造函数,因为我在模型中有许多实体要从包含该CreatedDate属性的抽象类继承,并且我不能使用接口强制构造函数.

我已经尝试了不同的数据注释和我试图写一个数据库初始化,将拿起一个特定的实体类型和写有一个ALTER约束getdate()正确的默认值table_namecolumn_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

29
推荐指数
3
解决办法
3万
查看次数

EF 5迁移无法连接到我们的数据库,即使它在运行时运行良好

我们有三个项目.

  • Company.Domain(类库)
  • Company.PublicWebsite(MVC3 Web Application)
  • Company.InternalWebsite(MVC3 Web应用程序)

这两个网站项目都参考了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

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

ASP.NET MVC 4,迁移 - 如何在生产服务器上运行"update-database"

我可以使用包管理器在本地运行'update-database -verbose'.

可能是一个愚蠢的问题,但我无法在线找到它 - 一旦部署了我的网站 - 我怎样才能在服务器上手动运行?

其次 - 您建议将数据库迁移部署到生产中的其他策略是什么?它们将如何更好?

谢谢

asp.net-mvc entity-framework asp.net-mvc-4 ef-migrations entity-framework-5

28
推荐指数
2
解决办法
3万
查看次数

由于Pending Changes,Update-Database失败,但Add-Migration创建了重复迁移

我正在使用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)

c# entity-framework ef-migrations

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

首先在代码中添加新列后删除默认约束

使用代码优先迁移向表中添加新的非可空列时,它将自动为您创建默认值.这是有道理的,因为现有行需要具有新列的值(因为它不能为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)

t-sql ef-migrations

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

NuGet包管理器控制台默认项目下拉列表为空

我最近从MSDN升级到Visual Studio 2012 RTM Ultimate.我正在使用EF Code First Migrations在我的应用程序中构建我的数据库,最近我添加了一个新实体,并希望为它进行迁移.

为此,您需要在VS中打开"包管理控制台"窗口,然后键入add-migration "some name here".这将自上次更新以来对数据库进行任何更改.


问题

VS 2012 RC上未发生此问题

我遇到的问题是,尽管我的解决方案中有多个项目,但未填充程序包管理器控制台中的"默认项目"下拉列表.我在上面输入命令时使用的默认项目是错误的项目(我的迁移在另一个项目中).我这样做时收到以下错误:

在程序集"ProjectA"中未找到任何迁移配置类型.(在Visual Studio中,您可以使用程序包管理器控制台中的"启用 - 迁移"命令添加迁移配置).

Visual Studio 2012程序包管理器控制台


我试过的

我已经尝试将正确的项目(ProjectB)设置为启动项目,只是为了得到这个错误:

无法加载程序集"ProjectA".(如果在Visual Studio中使用Code First Migrations,如果解决方案的startUp项目未引用包含迁移的项目,则可能会发生这种情况.您可以更改解决方案的startUp项目或使用-StartUpProjectName参数.)


问题

如何手动指定要添加的项目迁移,或强制"默认项目"下拉列表填充?

nuget ef-migrations entity-framework-5 visual-studio-2012

26
推荐指数
2
解决办法
2万
查看次数

代码优先迁移 - 如何显示待定模型更改?

我正在使用代码首次迁移.在构建新的迁移之前,有没有办法在包管理器控制台中显示挂起的模型更改?

.net c# ef-migrations

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