我有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)
如何启用迁移?
我有一个ASP.NET MVC3项目,它使用Entity Framework 4.3和代码优先方法.我使用迁移来使数据库保持最新.
该项目处于源头控制之下,我有许多分支机构.我刚刚意识到,当我想将一个分支合并到主分支中时会出现问题.由于我在两个分支中都创建了迁移文件,因此在合并时会出现重叠迁移,这可能会导致冲突.
有没有一种很好的方法来管理具有多个分支的项目中的迁移?
更新
一种方法是合并,然后删除在分支分离时创建的所有迁移文件,然后创建一个新的迁移文件,该文件包含从创建分支到重新合并之前的所有更改.这将适用于dev-environment,您可以在其中转储数据库并使用所有迁移文件重新构建它.那么问题就是现实环境.由于您无法回滚到创建分支的时间而没有丢失数据的风险,因此当您尝试使用新的迁移文件来更新实时数据库时会发生冲突.
c# version-control asp.net-mvc-3 ef-migrations entity-framework-4.3
我有一个名为的表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) 我的项目中有一个模型如下:
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
我一直在使用EF迁移一段时间,并且在我的项目中有超过100个迁移文件.我希望在继续之前将这些整合到一个迁移中 - 即我想用一个新版本替换现有的InitialCreate迁移,该版本将我的所有后续更改都考虑在内,这样我就可以删除所有其他迁移文件.
如果我不关心丢失数据库中的所有数据,我很容易这样做,但我是.
如何通过运行Update-Database(我认为使用Julie Lerman概述的方法无法实现)来保持所有数据的完整性并保留从头开始重新创建数据库(无数据)的能力?
我首先使用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)
我在哪里可以找到输出?
更好的是,如何输出回包管理器窗口?
谢,丹
实体框架4.1 Code First非常适合创建表和关系.是否可以使用Code first方法创建sql视图或存储过程?任何关于此的指示都将受到高度赞赏.非常感谢!
我们有多个开发人员在使用Entity Framework 5.0的项目上工作.每个开发人员都使用自己的本地SQL 2012数据库,这样他就可以开发和测试而不会妨碍其他人.
起初,我们使用了自动迁移和基于代码的迁移的混合体.这根本不起作用,所以我们决定禁用自动迁移,只允许基于代码.我应该补充一点,我们再次启动了一个干净的数据库而没有_MigrationsHistory来自所有自动迁移的"损坏" .
所以现在的工作流程是:
add-migration <Name>将其应用于他的数据库update-database.到目前为止,这运作良好.然而,在今天之前,通常只有我做了迁移而其他人应用了它们.但今天有来自三个开发人员的迁移.我刚刚完成了这些迁移,做了一件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进入他的数据库,另外两个用户也使用他的初始化来创建他们的数据库.然后,用户2和用户3都对数据模型进行自己的更改,并将其与应用更改所需的迁移一起添加到源控件.然后,用户1拉动用户2和3的更改,而用户1也自己对数据库进行了更改.然后,用户1调用update-database以应用用户2和3的更改.然后,他自己进行迁移,然后错误地将用户2或3的更改添加到脚手架迁移,这会在应用于用户1的数据库时导致错误.
我想让人的中间名可选.我一直在使用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) 我刚刚加入了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