标签: ef-migrations

EF 5启用 - 迁移:在程序集中未找到上下文类型

我有4个项目:

Toombu.Entities : all models are there
Toombu.DataAccess: Mapping, Repository and ToombuContext
Toombu.Logique : Logic of my application
Toombu.Web : MVC 4 application. With all others DLL.
Run Code Online (Sandbox Code Playgroud)

我试图在Toombu.Web中启用迁移,但我有这个错误:

No context type was found in the assembly
Run Code Online (Sandbox Code Playgroud)

如何启用迁移?

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

54
推荐指数
10
解决办法
10万
查看次数

如何在具有多个分支的项目中管理迁移?

我有一个ASP.NET MVC3项目,它使用Entity Framework 4.3和代码优先方法.我使用迁移来使数据库保持最新.

该项目处于源头控制之下,我有许多分支机构.我刚刚意识到,当我想将一个分支合并到主分支中时会出现问题.由于我在两个分支中都创建了迁移文件,因此在合并时会出现重叠迁移,这可能会导致冲突.

有没有一种很好的方法来管理具有多个分支的项目中的迁移?

更新

一种方法是合并,然后删除在分支分离时创建的所有迁移文件,然后创建一个新的迁移文件,该文件包含从创建分支到重新合并之前的所有更改.这将适用于dev-environment,您可以在其中转储数据库并使用所有迁移文件重新构建它.那么问题就是现实环境.由于您无法回滚到创建分支的时间而没有丢失数据的风险,因此当您尝试使用新的迁移文件来更新实时数据库时会发生冲突.

c# version-control asp.net-mvc-3 ef-migrations entity-framework-4.3

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

EF CodeFirst:参数@objname不明确或声称@objtype(COLUMN)错误

我有一个名为的表EducationTypes和一个名为Entity的实体EducationType,我重命名了一个实体属性,现在我经常得到它Either the parameter @objname is ambiguous or the claimed @objtype (COLUMN) is wrong.我该如何解决这个问题?

生成的SQL脚本:

EXECUTE sp_rename @objname = N'dbo.EducationTypes.nvarchar', @newname = N'EducationTypeTitle', @objtype = N'COLUMN'
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first ef-migrations

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

用于更改列的数据类型的EF迁移

我的项目中有一个模型如下:

public class Model 
{
    public int Id { get; set; }
    public long FromNo { get; set; }
    public long ToNo { get; set; }
    public string Content { get; set; }
    public long TicketNo { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

迁移如下

public override void Down()
{
    AlterColumn("dbo.Received", "FromNo", c => c.Long(nullable: false));
    AlterColumn("dbo.Received", "ToNo", c => c.Long(nullable: false));
    AlterColumn("dbo.Received", "TicketNo", c => c.Long(nullable: false));
}
public override void Up()
{
    AlterColumn("dbo.Received", "FromNo", c => c.String());
    AlterColumn("dbo.Received", "ToNo", c => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework visual-studio ef-migrations entity-framework-5

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

将EF迁移整合到新的InitialCreate中

我一直在使用EF迁移一段时间,并且在我的项目中有超过100个迁移文件.我希望在继续之前将这些整合到一个迁移中 - 即我想用一个新版本替换现有的InitialCreate迁移,该版本将我的所有后续更改都考虑在内,这样我就可以删除所有其他迁移文件.

如果我不关心丢失数据库中的所有数据,我很容易这样做,但我是.

如何通过运行Update-Database(我认为使用Julie Lerman概述的方法无法实现)来保持所有数据的完整性并保留从头开始重新创建数据库(无数据)的能力?

entity-framework ef-migrations entity-framework-5

47
推荐指数
2
解决办法
8375
查看次数

在哪里可以找到包管理器窗口中执行的代码的控制台或调试输出?

我首先使用EntityFramework代码进行迁移.从包管理器控制台,我正在运行"update-database".这会执行我已覆盖的Configuration.Seed(context).

    protected override void Seed(WebContext context)
    {

        Console.WriteLine("Console Test");
        Debug.WriteLine("Debug Test");
        Trace.WriteLine("Trace Test");
    }
Run Code Online (Sandbox Code Playgroud)

我在哪里可以找到输出?

更好的是,如何输出回包管理器窗口?

谢,丹

entity-framework ef-code-first nuget ef-migrations

45
推荐指数
4
解决办法
1万
查看次数

您可以使用Entity Framework 4.1 Code第一种方法创建sql视图/存储过程

实体框架4.1 Code First非常适合创建表和关系.是否可以使用Code first方法创建sql视图或存储过程?任何关于此的指示都将受到高度赞赏.非常感谢!

c# code-first entity-framework-4.1 ef-migrations

44
推荐指数
5
解决办法
4万
查看次数

协作环境中的实体框架中的迁移

我们有多个开发人员在使用Entity Framework 5.0的项目上工作.每个开发人员都使用自己的本地SQL 2012数据库,这样他就可以开发和测试而不会妨碍其他人.

起初,我们使用了自动迁移和基于代码的迁移的混合体.这根本不起作用,所以我们决定禁用自动迁移,只允许基于代码.我应该补充一点,我们再次启动了一个干净的数据库而没有_MigrationsHistory来自所有自动迁移的"损坏" .

所以现在的工作流程是:

  1. 开发人员更改了他的数据模型
  2. 是否add-migration <Name>将其应用于他的数据库update-database.
  3. 检查数据模型更改和迁移到Git.
  4. 另一个开发人员拉动,接收更改并将其应用到他的数据库.

到目前为止,这运作良好.然而,在今天之前,通常只有我做了迁移而其他人应用了它们.但今天有来自三个开发人员的迁移.我刚刚完成了这些迁移,做了一件update-database好事.

我也对自己的数据模型进行了更改,但是在结束时update-database它给了我一个警告,我仍然没有更新,所以我做了add-migration <my migration>.但是,当它支持迁移时,它给了我已经应用到数据库的所有迁移的更改.所以:它试图删除已经删除的列,尝试创建一个已经存在的表,等等.

怎么可能?我的假设是EF只是检查_MigrationsHistory表格并找出表格中没有的迁移,并按名称的时间戳顺序应用这些迁移.但显然不是,因为即使我撤消自己的更改并且我有一个干净的环境,它仍然抱怨我的数据库与模型不同步.但我只是将这些更改删除并应用到我的数据库中.它同步的.我也可以看到我刚才在_MigrationsHistory表格中应用的迁移.

我唯一能想到的是我在一个不会导致数据库更改的数据模型中添加了一个属性(我List<X>在数据模型中添加了一个Y,其中X是一对多关系中的多个.这不会导致数据库更改,因为X已经有一个外键到Y).可能是吗?如果是这样,那真的很脆弱,因为没有办法为此添加迁移,因为没有数据库更改,我也不知道如何解决这个问题.

我不知道如何处理这个问题,因为我当然可以编辑它所支撑的内容并删除已经应用于我的数据库的所有内容.但那又怎样?我检查它然后其他一些开发人员得到相同的消息,即使他的数据库不适用于我的新更改,支持他自己的更改,获取相同的无意义脚手架,编辑它,检查它然后下一个开发者得到它.它变成了一个恶性循环,与我们使用自动迁移时的情况类似,我认为我们已经通过切换到基于代码的方式来解决这个问题.我现在不能相信做正确的事情,这样做是一场噩梦.

我也尝试过添加我从同事那里逐一删除的迁移,update-database -t:201211091112102_<migrationname>但无济于事.它仍然给我错误的脚手架.

那么我们在这里做错了什么,或者EF根本不是为这样的协作而构建的?

UPDATE

我创建了一个可重现的测试用例,虽然为了模拟这个多用户/多数据库场景,它有点冗长的舞蹈.

https://github.com/JulianR/EfMigrationsTest/

有上述项目时重现的步骤(这些步骤也出现在代码中):

  1. add-migration Init
  2. update-database(在数据库'TestDb'上)
  3. 将连接字符串更改为指向TestDb1
  4. TestDb1上的update-database
  5. 在类Test上取消注释属性Foo
  6. add-migration M1将属性Foo添加到TestDb1
  7. 再次评论Test.Foo
  8. 将连接字符串更改为指向TestDb2
  9. 从项目中排除迁移M1,因此它不会应用于TestDb2
  10. 在类Test上取消注释属性Bar
  11. update-database将Init迁移应用于TestDb2
  12. add-migration M2将属性Bar添加到TestDb2
  13. 将连接字符串更改为再次指向原始TestDb
  14. 将迁移M1再次包含到项目中
  15. 在类Test上取消注释属性Foo
  16. 在类Test上取消注释属性SomeInt
  17. 更新数据库
  18. 添加迁移M3
  19. update-database,因为M3尝试将列Foo添加到已经由迁移M1添加的数据库TestDb中而获得错误.

以上是模拟三个用户,其中用户1进入他的数据库,另外两个用户也使用他的初始化来创建他们的数据库.然后,用户2和用户3都对数据模型进行自己的更改,并将其与应用更改所需的迁移一起添加到源控件.然后,用户1拉动用户2和3的更改,而用户1也自己对数据库进行了更改.然后,用户1调用update-database以应用用户2和3的更改.然后,他自己进行迁移,然后错误地将用户2或3的更改添加到脚手架迁移,这会在应用于用户1的数据库时导致错误.

c# migration collaboration entity-framework ef-migrations

44
推荐指数
3
解决办法
8378
查看次数

如何使我的字符串属性可以为空?

我想让人的中间名可选.我一直在使用C#.net代码的第一种方法.对于整数数据类型,只需使用?运算符使其可以为空即可.我正在寻找一种让我的sting变量可以为空的方法.我试图搜索但找不到让它可以为空的方法.

以下是我的代码.请建议我如何让它可以为空.

public class ChildrenInfo
{
    [Key]
    public int ChidrenID { get; set; }

    [Required]
    [Display(Name ="First Name")]
    [StringLength(50,ErrorMessage ="First Name cannot exceed more than 50 characters")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Name cannot have special character,numbers or space")]
    [Column("FName")]
    public string CFName { get; set; }

    [Display(Name ="Middle Name")]
    [RegularExpression(@"^[A-Z]+[a-z]*$",ErrorMessage ="Middle Name cannot have special character,numbers or space")]
    [StringLength(35,ErrorMessage ="Middle Name cannot have more than 35 characters")]
    [Column("MName")]
    public string? CMName { get; set; }
}   
Run Code Online (Sandbox Code Playgroud)

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

44
推荐指数
4
解决办法
9万
查看次数

无法在类库中启用Entity Framework的迁移

我刚刚加入了EF 5并使用了他们的代码优先迁移工具,但是当我尝试启用迁移时,我似乎遇到了错误.

我输入Enable-Migrations包管理器控制台,然后说

没有从当前项目中找到的DbContext派生的类.
编辑生成的Configuration类以指定启用迁移的上下文.
为项目MyApp.MvcUI启用了代码优先迁移.

然后它在我的MvcUI项目中创建一个Migrations文件夹和一个Configuration类.事实上,我的DbContext存在于名为MyApp.Domain的类库项目中.它应该在该项目中完成所有这一切,并且应该没有问题找到我的DbContext.

c# entity-framework ef-code-first ef-migrations entity-framework-5

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