有什么办法可以禁用Entity Framework 4.3.1中的迁移? 我从项目和我的数据库中生成的表中删除了迁移文件夹,但它不起作用! 你如何消除迁移?
我的EF 4.3.1模型有200多个表格。 最初的启动是可怕的,几分钟。 一个DotTrace捕获的configuration文件意味着一些可怕的algorithm/可伸缩性select深深的框架,从数百万的调用方法,以及3600万IEnumerable.Contains()调用的certificate。 这是一个片段,这是由数据库上的第一个查询触发(未来的查询不这样做,并没有问题)。 我可以对我的模型做些什么来减轻这种痛苦? 我可以预先编译这个吗? 更好的是,英孚团队可以解决这些问题,还是可以开放框架? 或者至less修复Warapper的拼写? 🙂 编辑:一个具体的EF调用触发这基本上是var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault(); var db = new MyDbContext(); db.Personnel.Where(a => a.Login == login).SingleOrDefault(); 。 另外一个EF迁移种子()AddOrUpdate生成有效的相同的堆栈。 更完整的堆栈跟踪,这可能会提供更多的上下文,在这里: 富勒堆栈跟踪 编辑:一些相关的链接: MSDN: 性能考虑(entity framework) (感谢@AakashM) MSDN: EF电动工具 SO: 大量表格的entity framework4.1(715) 编辑2:现在,他们只是开源代码,看来,这一行: //Filter the 1:1 foreign key associations to the ones relating […]
我正在使用EF 4.3,并且有一个上下文需要与使用EF Code First 4.3的另一个库生成的数据库进行通信。 上下文抛出一个exception说明 自创build数据库以来,支持“上下文”上下文的模型已经发生了变化。 考虑使用Code First Migrations来更新数据库 在EF 4.1中,可以通过从模型构build器中删除IncludeMetadataConvention来将其删除。 然而,在4.3中这个惯例已经被废弃了,不再有效果。 我怎么能EF 4.3上下文对由不同的上下文构build的EF 4.3生成的数据库? 我发现唯一的select(这是远远不是理想的)是删除元数据表,从而导致两个上下文假设数据库不由EF生成。 PS:我知道这种情况可能会引起我为什么需要这样做的问题; 我知道这是远远不够理想,但放心,这是我需要解决的问题,并有限的select,以横向工作。
我一直在使用entity framework4.3在一个现有的数据库,我有几个场景,我试图迎合。 首先,如果我删除我的数据库,我想EF重新创build,如果从头开始 – 我已经成功地使用CreateDatabaseIfNotExists数据库初始化程序。 其次,如果我更新我的模型和数据库已经存在,我想数据库自动更新 – 我已经成功地使用entity framework4.3迁移为此。 所以这是我的问题。 假设我在我的模型中添加了一个新的表格,这个表格需要一些参考数据,确保在数据库初始化器运行时以及迁移运行时创build这个数据的最好方法是什么。 我的愿望是,当我从头开始创build数据库时,以及数据库由于运行迁移而被更新时,数据被创build。 在一些EF迁移的例子中,我看到人们在迁移的UP方法中使用SQL()函数来创build种子数据,但是如果可能的话,我宁愿使用上下文来创build种子数据(就像你在大多数数据库初始化例子中看到的那样)因为在我看来,当EF的整个想法正在抽象出来的时候,你会使用纯SQL。 我试图在UP方法中使用上下文,但由于某种原因,当我尝试在调用下方直接添加种子数据以创build表时,它并不认为在迁移中创build的表存在。 任何智慧不胜感激。
我最近更改了一个应用程序使用以下的开发: DropCreateDatabaseIfModelChanges<Context> 使用: public class MyDbMigrationsConfiguration: DbMigrationsConfiguration<GrsEntities> { public MyDbMigrationsConfiguration() { AutomaticMigrationsEnabled = true; AutomaticMigrationDataLossAllowed = true; } } 在我的数据库环境中,我有: protected override void OnModelCreating(DbModelBuilder modelBuilder) { // Tell Code First to ignore PluralizingTableName convention // If you keep this convention then the generated tables will have pluralized names. modelBuilder.Conventions.Remove<PluralizingTableNameConvention>(); //set the initializer to migration Database.SetInitializer(new […]
我们在SCM下有一个项目。 当我从我的机器构build它,并通过msdeploy发布到远程服务器,一切工作正常。 当我的同事用同一个项目尝试同样的事情时,刚刚从SCM中拉出来,在远程服务器entity framework上4.3.1 DbMigrator抛出: 自动迁移未应用,因为这会导致数据丢失。 事实certificate,初始发布到远程服务器的人似乎是“胜利者”。 如果我们把数据库放在远程服务器上,那么我的同事就可以发布,并且被locking。 我的出版物导致上述相同的错误。 DbMigrator的configuration如下所示: var dbMgConfig = new DbMigrationsConfiguration() { AutomaticMigrationsEnabled = true, //***DO NOT REMOVE THIS LINE, //DATA WILL BE LOST ON A BREAKING SCHEMA CHANGE, //TALK TO OTHER PARTIES INVOLVED IF THIS LINE IS CAUSING PROBLEMS AutomaticMigrationDataLossAllowed=false, //***DO NOT REMOVE THIS LINE, ContextType = typeof(TPSContext), MigrationsNamespace = […]
我正在使用entity framework4.3和使用代码拳头。 我有一堂课 public class User { public int UserId{get;set;} public string UserName{get;set;} } 创build数据库表时,如何告诉entity frameworkUserName必须是唯一的? 如果可能的话,我宁愿使用数据注释而不是configuration文件。
我正尝试用一些testing数据来开发一个开发数据库。 我已经使用了context.People.AddOrUpdate(p => p.Id, people)); 取得很大的成功。 我有另外一张桌子,我需要种子,其中我不知道主键。 例如,我想要基于First和Last名称匹配的AddOrUpdate。 我不确定如何正确写入expression式。 context.People.AddOrUpdate(p => p.FirstName && p.LastName, people); 显然是不正确的,但我希望它传达了我正在寻找的解决scheme。
我有一个关于.AsNoTracking()扩展的问题,因为这是非常新的和相当混乱的。 我正在使用每个请求上下文的网站。 很多我的实体不会改变,所以不需要被跟踪,但是我有以下情况,我不确定数据库是什么,甚至是否在这种情况下有所作为。 这个例子就是我现在正在做的事情: context.Set<User>().AsNoTracking() // Step 1) Get user context.Set<User>() // Step 2) Update user 这与上面的一样,但从步骤1中删除.AsNoTracking() : context.Set<User>(); // Step 1) Get user context.Set<User>() // Step 2) Update user 步骤1和2使用相同的上下文,但发生在不同的时间。 我不能解决的是是否有任何区别。 由于第2步是更新,我猜两者无论如何都会触发数据库两次。 谁能告诉我有什么不同?
出于某种原因,我的移民似乎已经混乱/损坏/无论如何。 我只是想重新开始,所以有办法完全撤销所有的迁移,删除历史logging,并删除迁移代码,所以我回到了原点? 例如) PM> Disable-Migrations或Rollback-Migrations 我不想“更新”到原始迁移步骤(即像InitialSchema目标),因为我找不到它了。