草庐IT

C# EF Code First 虚拟关键字,它有什么作用?

为什么我们在声明导航属性时需要使用“virtual”关键字?我知道CodeFirst框架以某种方式使用它来识别该属性是一个导航属性,但我想知道如何。具体来说,我想知道它与MSDN文档中针对“virtual”关键字的描述有何关系:http://msdn.microsoft.com/en-us/library/9fkccyh4(v=vs.80).aspx 最佳答案 在运行时,EntityFramework将为您生成所谓的代理实体。这些实体是派生自您的实体类型的动态创建类型的对象。这允许您将您的实体用作POCO,它是一个与EntityFr

c# - 使用最小起订量的同步方法测试 EF 异步方法

我有这个方法:publicasyncTaskDeleteUserAsync(GuiduserId){using(varcontext=this.contextFactory.Create()){varuser=awaitcontext.Users.FirstOrDefaultAsync(x=>x.Id.Equals(userId));if(user==null){thrownewException("Userdoesn'texist");}context.Users.Remove(user);awaitcontext.SaveChangesAsync();}}我想测试一下。所以我创建了

c# - 为什么 EF 4 中的 Persistence Ignorant POCO 需要 "Fixup"?

EntityFramework4备受期待的功能之一是能够以无持久性的方式使用POCO(普通旧CLR对象)(即,它们“不知道”它们是通过EntityFramework与一些其他机制)。我正在努力思考为什么有必要在我的“普通”业务对象中执行关联修复并使用FixupCollection。该要求似乎暗示业务对象毕竟不能完全忽略持久性机制(事实上,“修复”一词听起来像是需要修复/更改某些内容才能与所选的持久性机制一起工作)。具体来说,我指的是由ADO.NETPOCO实体生成器生成的AssociationFixup区域,例如:#regionAssociationFixupprivatevoidFi

c# - EF AddOrUpdate 种子不更新子实体

我在播种数据时遇到了一些问题,我能够通过一个非常小的应用程序重现该问题。假设你有这个种子方法:protectedoverridevoidSeed(JunkContextcontext){context.Junks.AddOrUpdate(x=>x.Name,newJunk(){Name="BANANAS!!",Item=newJunkItem(){Name="APPLES!!!"}});}当您在PMC中运行update-database时,所有实体都会成功创建。很好。但是当你想去更新数据库时,说你的种子方法现在是这样的:protectedoverridevoidSeed(JunkCon

c# - EF 4.1 和 "Collection was modified; enumeration operation may not execute."异常

在过去的2天里,这让我抓狂。我有3个非常基本的类(好吧,为了便于阅读而减少了)publicclassEmployee{publicstringName{set;get;}virtualpublicEmployerEmployer{set;get;}publicEmployee(stringname){this.Name=name;}},//thisbasicallytiesEmployeeandhisroleinacompany.publicclassEmployeeRole{publicintId{set;get;}virtualpublicEmployeeEmployee{set;

c# - EF Code First MigrateDatabaseToLatestVersion 从配置中接受连接字符串名称

在我的项目中尝试实现EF迁移时,我被困在一个地方。EFCodeFirstMigrateDatabaseToLatestVersion接受来自配置的连接字符串名称。在我的例子中,数据库名称在运行时已知(用户从下拉列表中选择它)。正如DbContext在其构造函数中接受ConnectionString或connectionStringName的方式,“MigrateDatabaseToLatestVersion”不接受相同的System.Data.Entity.Database.SetInitializer(newMigrateDatabaseToLatestVersion(connStr

c# - EF 代码优先 : DropCreateDatabaseIfModelChanges doesn't work

我在我的Global.asax中使用以下代码:DbDatabase.SetInitializer(newDropCreateDatabaseIfModelChanges());但是好像不行。尽管我的模型已更改并且我正在尝试使用其中一个新添加的表,但它只是说找不到该表。Invalidobjectname'dbo.TableName'.但是,如果我运行它,它似乎可以工作,并且正在创建表:DbDatabase.SetInitializer(newDropCreateDatabaseAlways());它确实更新了我的数据库。我做错了什么? 最佳答案

c# - EF4 代码优先 : how to add a relationship without adding a navigation property

我应该如何在不使用任何导航属性的情况下使用CodeFirst来定义关系?之前,我通过在关系的两端使用导航属性来定义一对多和多对多。并在数据库中创建适当的关系。这是类外观的精简版本(为简单起见,我已将多对多关系转换为一对多)。publicclassUser{publicstringUserId{get;set;}publicstringPasswordHash{get;set;}publicboolIsDisabled{get;set;}publicDateTimeAccessExpiryDate{get;set;}publicboolMustChangePassword{get;set

c# - 跳过并取 : An efficient approach to OFFSET LIMIT in EF 4. 1?

以下代码:using(vardb=newEntities()){db.Blogs.First().Posts.Skip(10).Take(5).ToList();}将生成以下SQL:--statement#1SELECTTOP(1)[c].[Id]AS[Id],[c].[Title]AS[Title],[c].[Subtitle]AS[Subtitle],[c].[AllowsComments]AS[AllowsComments],[c].[CreatedAt]AS[CreatedAt]FROM[dbo].[Blogs]AS[c]--statement#2SELECT[Extent1]

c# - 如何从代码 (EF Core) 应用迁移

这是一些有效的EF6迁移代码:Database.SetInitializer(null);varsettings=newMigrationsConfiguration();varmigrator=newDbMigrator(settings);migrator.Update();使用EFCore的等效项是什么? 最佳答案 在beta7及更高版本中,使用:usingMicrosoft.Data.Entity;...context.Database.Migrate(); 关于c#-如何从代码