这些是我的简化域类.
public class ProductCategory
{
public int ProductId { get; set; }
public int CategoryId { get; set; }
public virtual Product Product { get; set; }
public virtual Category Category { get; set; }
}
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
}
public class Category
{
public int Id { get; set; }
public string Name { get; set; }
public int? ParentCategoryId { get; set;}
} …Run Code Online (Sandbox Code Playgroud) 我有点难过.根据我的阅读设置DbContext.AutoDetectChangesEnabled,false应该禁用需要调用的更改跟踪DbContext.DetectChanges,以便识别要发送到数据库的更改.
但是,从我的下面的日志中可以清楚地看到,dbContexts更改跟踪器正在注册更改,即使设置为false也是如此.
我错过了什么吗?
实体框架版本:5.0.0.0
DbContext类
public class ProjectContext : DbContext {
public DbSet<Project> Projects {get;set;}
}
Run Code Online (Sandbox Code Playgroud)
控制器类
private ProjectContext db = new ProjectContext();
public method(){
Project p = new Project("uniqueName");
db.Configuration.AutoDetectChangesEnabled = false;
db.Projects.Add(p);
DebugChangeTracker();
db.SaveChanges();
db.Projects.First().ProjectName = "a differentName!";
DebugChangeTracker();
db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)
记录方法
private void DebugChangeTracker()
{
var path = "C:\\mypath\\";
path = path + Util.GetMsSinceEpoch().ToString() + "changeTracker.log";
using (StreamWriter sw = new StreamWriter(path))
{
var changeTracker = db.ChangeTracker;
var entries = changeTracker.Entries(); …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
所以我尝试使用我的新MVC 4项目进行自动迁移,但不知何故它无法正常工作.我一步一步地关注这篇博文.
我已将更改添加到UserProfile帐户模型(NotaryCode字段):
[Table("UserProfile")]
public class UserProfile
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
public int UserId { get; set; }
public string UserName { get; set; }
public int NotaryCode { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后我在包管理器控制台上写了enable-migrations一个Configuration类出现(继承自DbMigrationsConfiguration<Web.Models.UsersContext>)然后我将类填充为:
public Configuration()
{
AutomaticMigrationsEnabled = true;
}
protected override void Seed(Atomic.Vesper.Cloud.Web.Models.UsersContext context)
{
WebSecurity.InitializeDatabaseConnection(
"DefaultConnection",
"UserProfile",
"UserId",
"UserName", autoCreateTables: true);
if (!Roles.RoleExists("Atomic"))
Roles.CreateRole("Atomic");
if (!Roles.RoleExists("Protocolista"))
Roles.CreateRole("Protocolista");
if (!Roles.RoleExists("Cliente"))
Roles.CreateRole("Cliente");
string adminUser = "randolf";
if (!WebSecurity.UserExists(adminUser))
WebSecurity.CreateUserAndAccount(
adminUser, …Run Code Online (Sandbox Code Playgroud) 我一直在使用带有试用许可证的Visual Studio 2012 RC,没有任何问题.我昨天购买了Visual Studio 2012 Professional,安装了最新版本,并安装了Update 1.
我有一个我已经工作多年的解决方案/项目.它有许多迁移.我跑了第一个add-migration TableX_NewField和update-database -sourcemigration:TableX_PreviousNewField最新版本.
他们都跑了没有问题.
然后我跑了update-database -script -sourcemigration:TableX_PreviousNewField并收到以下内容:
PM> update-database -script -sourcemigration:TableX_PreviousNewField
Applying code-based migrations: [201301151003149_TableX_NewField].
Applying code-based migration: 201301151003149_TableX_NewField.
System.Runtime.InteropServices.COMException (0x8004000C): User canceled out of save dialog (Exception from HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
at EnvDTE.ItemOperations.OpenFile(String FileName, String ViewKind)
at System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
at System.Data.Entity.Migrations.Utilities.DomainDispatcher.OpenFile(String fileName)
at System.Data.Entity.Migrations.Extensions.ProjectExtensions.NewSqlFile(Project project, String contents)
at System.Data.Entity.Migrations.UpdateDatabaseCommand.<>c__DisplayClass2.<.ctor>b__0()
at System.Data.Entity.Migrations.MigrationsDomainCommand.Execute(Action command)
User canceled out of save dialog (Exception from HRESULT: 0x8004000C (OLE_E_PROMPTSAVECANCELLED))
Run Code Online (Sandbox Code Playgroud)
我已经运行了Windows更新.使用NuGet检查更新.重新启动了我的电脑.仍然有错误.
使用(实体框架)EF5处理批量更新的最佳方法是什么?我有两个我感兴趣的特殊情况:
更新一个字段(例如UpdateDate)以获取100到100.000 Id之间的列表(List),这是主键.分别调用每个更新似乎需要很多开销并且需要很长时间.
在单个go中插入多个,也在100到100.000之间的相同对象(例如用户).
有什么好建议吗?
我有基于.NET 4.0的项目,但我需要在我的解决方案中使用EntityFramework 5.所以我从NuGet安装它.
之后,我将目标框架更改为.NET 4.5(我正在使用VS 2012)并重建项目.
但在参考文件夹中,我看到该项目使用EntityFramework.dll版本4.4.0.0.
何我可以使用较新版本的EntityFramework?
在web.config中
<compilation debug="true" targetFramework="4.5">
<assemblies>
<add assembly="System.Data.Entity, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
</assemblies>
</compilation>
Run Code Online (Sandbox Code Playgroud) 我在MVC 4 aspnet网站上使用EF5.在本地,一切正常,但当我将其发布到IIS并尝试进入时,我得到错误
"'System.Data.Entity.Internal.AppConfig'的类型初始化程序引发了异常."
详细例外
为entityFramework创建配置节处理程序时出错:在应用程序配置中多次指定DbContext类型'GdpSoftware.Server.Data.GdpSoftwareDbContext,GdpSoftware.Server.Data'的配置.每个上下文只能配置一次.(E:\ App\web.config第104行)
我在StackOverflow中检查了之前的问题,我已经通过Nuget EntityFramework卸载并重新安装,并检查每个项目中对它的每个引用都是EF5.我还检查了每个项目中选定的框架是4.5.
任何想法,可能导致问题的原因是什么?谢谢!吉列尔莫.
web.config中
<?xml version="1.0" encoding="utf-8"?>
<!--
For more information on how to configure your ASP.NET application, please visit
http://go.microsoft.com/fwlink/?LinkId=169433
-->
<configuration>
<configSections>
<section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
<!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --></configSections>
<connectionStrings>
<add name="GdpSoftwareConnectionString" connectionString="Persist Security Info=False;User ID=user;Password=password;Initial Catalog=databasename;Data Source=server" providerName="System.Data.SqlClient" />
<add name="GdpSoftware.Server.Data.GdpSoftwareDbContext" connectionString="GdpSoftware.Server.Data.GdpSoftwareDbContext_ConnectionString" providerName="System.Data.SqlClient"/>
<add name="GdpSoftware.Server.Ui.Web.Models.UsersContext" connectionString="GdpSoftware.Server.Ui.Web.Models.UsersContext_ConnectionString" providerName="System.Data.SqlClient"/>
</connectionStrings>
<appSettings>
<add key="webpages:Version" value="2.0.0.0" />
<add key="webpages:Enabled" value="false" /> …Run Code Online (Sandbox Code Playgroud) asp.net asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
在将项目从使用Entity Framework 5升级到Entity Framework 6之后(虽然NuGets更新功能)我在生成的Entities类上收到以下错误:
错误1命名空间"System.Data"中不存在类型或命名空间名称"Objects"
(您是否缺少程序集引用?)
我知道这是因为命名空间已经改变,我可以通过更改我的导入来手动修复错误:
using System.Data.Objects;
和using System.Data.Objects.DataClasses;
To:
using System.Data.Entity.Core.Objects;
但是生成文件所以我需要在每次之后重新应用此修复程序Update model from Database.有没有额外的东西可以让EF生成没有这个错误的模型.
c# entity-framework ef-database-first entity-framework-5 entity-framework-6
我想在表中强制使用唯一约束,我正在使用Entity Framework Code-First.
是否可以使用EF 6添加唯一约束,因为我相信早期版本是不可能的.
asp.net-mvc entity-framework entity-framework-5 entity-framework-6