我需要在.NET 4上使用EF5,并且在使用HasDatabaseGenerationOption.Identity映射我的类时遇到了引用问题,该版本在4.0版本的库中不存在.
以下是失败的:
this.Property(t => t.DeploymentLogId)
.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Run Code Online (Sandbox Code Playgroud)
有谁知道一项工作?
我有一些代码可以在代码中保存多对多的关系.它与Entity Framework 4.1一起运行良好,但在更新到Entity Framework 5后,它失败了.
我收到以下错误:
INSERT语句与FOREIGN KEY约束"FK_WebUserFavouriteEvent_Event"冲突.冲突发生在数据库"MainEvents",表"dbo.Event",列"Id"中.
我正在使用POCO实体和自定义映射.标准字段和多对一关系映射似乎工作正常.
UPDATE
好的,所以我安装了SQL Profiler并且情节已经变厚......
exec sp_executesql N'insert [dbo].[WebUserFavouriteEvent]([WebUserId], [EventId])
values (@0, @1)
',N'@0 int,@1 int',@0=1820,@1=14
Run Code Online (Sandbox Code Playgroud)
意思是:
WebUserId = @0 = 1820
EventId = @1 = 14
Run Code Online (Sandbox Code Playgroud)
有趣的是,EF5似乎已经翻转了外键 ...... WebUserId应该是14,而EventId 应该是1820,而不是像现在这样.
我查看了映射代码,我99%我已经正确设置了它.有关详细信息,请参阅实体框架Fluent API - 关系MSDN文章.
注意:我还发现这不仅限于保存,SELECT也被破坏.
这是所有相关代码:
服务层
public void AddFavEvent(WebUser webUser, Event @event)
{
webUser.FavouriteEvents.Add(@event);
_webUserRepo.Update(webUser);
}
Run Code Online (Sandbox Code Playgroud)
知识库
public void Update<T>(params T[] entities)
where T : DbTable
{
foreach (var entity in entities)
{
entity.UpdatedOn …Run Code Online (Sandbox Code Playgroud) 首先在Entity Framework 5模型中,由于生成类文件的方式,似乎存在一些重大更改(不再生成代码,但是T4模板)
2个例子:
是否有更多的突破性变化?他们的解决方案是什么?
我的MVC应用程序具有经典的父子关系(master-detail).
我希望有一个页面可以在同一页面上创建新父项和子项.我添加了一个动作,它返回一个局部视图,并将子HTML添加到父视图中,但我不知道如何将动作中新创建的子视图与原始父视图相关联(换句话说,如何添加新的子实体到父实体中这些实体的集合).
我想当我提交表单时,操作应该让父实体在其集合中创建新创建的子节点.
因此,为了简化,创建子实体的操作代码应该是什么以及子代如何添加到其父集合中?
我在这里(和其他网站)阅读了很多帖子,但找不到一个例子.
该应用程序使用MVC 4和Entity Framework 5.
代码示例(我删除了一些代码,保持简单).该模型是Form(父)和FormField(子)实体.
public partial class Form
{
public int ID { get; set; }
public string Name { get; set; }
public virtual ICollection<FormField> FormFields { get; set; }
}
public partial class FormField
{
public int ID { get; set; }
public string Name { get; set; }
public int FormID { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
以下部分视图(_CreateFormField.cshtml)创建新的FormField(子).
@model FormField
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>FormField</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div> …Run Code Online (Sandbox Code Playgroud) asp.net-mvc entity-framework master-detail asp.net-mvc-4 entity-framework-5
我正在使用Entity Framework 5(使用Code First方法)从带有参数的遗留存储过程填充我的一类,这很正常(详情如下).我的问题是我想将列的名称映射到具有不同名称的属性(我不喜欢来自Erp的名称).我尝试使用Configuration类(就像我映射到视图或表时所做的那样)来为具有不同名称的属性指定列名,这是我的结果:
为什么配置会影响我的结果,但其规范不用于映射列?有没有其他方法使用SqlQuery指定此映射?
以下是详细信息:
我的POCO课程:
public class Item
{
public String Id { get; set; }
public String Description { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
配置类:
public class ItemConfiguration : EntityTypeConfiguration<Item>
{
public ItemConfiguration()
{
HasKey(x => new { x.Id });
Property(x => x.Id).HasColumnName("Code");
Property(x => x.Description).HasColumnName("ItemDescription");
}
}
Run Code Online (Sandbox Code Playgroud)
存储过程返回带有"Code"和"ItemDescription"列的数据; 我用这种方式称呼它:
var par = new SqlParameter();
par.ParameterName = "@my_par";
par.Direction = ParameterDirection.Input;
par.SqlDbType = SqlDbType.VarChar;
par.Size = 20;
par.Value = ...;
var data = _context.Database.SqlQuery<Item>("exec …Run Code Online (Sandbox Code Playgroud) mapping configuration stored-procedures ef-code-first entity-framework-5
我有一个问题,有人可能在过去找到了解决方案.我正在使用AddOrUpdate方法为EF5迁移的Configuration类中的数据库进行种子设定.
以下是域模型的快速示例:
public class Club
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
}
public class Court
{
public virtual long Id { get; set; }
public virtual string Name { get; set; }
public virtual long? ClubId { get; set; }
public virtual Club Club { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
然后这是我的种子方法的摘录:
Club cb = new Club { Name = "Test Club 1" };
context.Set<Club>().AddOrUpdate(m=>m.Name, cb);
context.SaveChanges();
Court crt1 = new …Run Code Online (Sandbox Code Playgroud) 有人可以解释一下
在调试模式下,如果我在没有调试的情况下启动项目,我的网页加载时间为116秒,而加载时为15秒.
我已经设置了跟踪语句,并确定在调试模式下,在我的DbContext.SaveChanges方法中花费了大约116秒.
运行项目而不调试在同一部分中花费7秒钟.
如果您想了解更多信息,请在评论中告诉我.
项目设置:
附加信息:(如果您需要更多,请在评论中告诉我)
更新:
正如@ruionwriting建议的那样,我描述了数据库,我发现,无论项目是在调试模式还是生产模式下运行,~2,000 sql命令都会花费相同的时间.(每个命令0毫秒).
但是,在调试模式下,20,000个命令之间的平均绝对时间差为5ms.
与生产模式相比,该组命令的平均时间差为0.3 ms.
这是大约10倍的时间性能差异,并将实体框架隔离为在调试模式下花费额外时间.
有没有办法配置调试版本,以便可以在没有调试标志的情况下引用EntityFramework?
如果我以某种方式通过一些编译器魔术来实现性能,那么在调试功能方面我会失去什么?目前我无法进入实体框架代码,所以我认为我不会错过任何东西.
谢谢!
asp.net performance intellitrace dbcontext entity-framework-5
我知道在使用Entity Framework时可以产生异常的两种不同场景DbContext:
EntityCommandExecutionException)SaveChanges(可以扔一个DbUpdateException)在单个实例中DbContext,我想要捕获这些异常,尝试恢复(如果适用),然后重复操作.
具体来说,如果SaveChanges由于死锁而抛出异常的调用,我想重试调用SaveChanges.我已经知道如何检测这种情况并执行重试.
我在这里看到了这个答案,它表明在死锁后不应该使用SQL连接.这表明我应该重新启动整个DbContext和更高级别的操作以从这些异常中恢复.
我不确定的是,DbContext在抛出异常之后继续使用它是否安全.它会进入无法使用状态吗?它仍然可以工作但功能不正确吗?将SaveChanges事务不再发生?
我正在使用Web部署首先使用EF5代码部署MVC4应用程序.我创建了一个名为"development"的发布配置文件,它使用"执行代码优先迁移"复选框对应用程序和数据库进行Web部署,以便在应用程序启动时运行迁移.出版工作有一段时间了.在某些时候,我添加了一个名为"test"的新发布配置文件,以部署到另一台服务器,该服务器使用部署的ftp方法而不进行自动迁移.这也很好.但是,当我再次尝试使用旧的"开发"发布配置文件时,VS会自动将设置更改为dbDacFx方式("更新数据库"复选框而不是"执行代码优先迁移"),我无法将其恢复为它的方式.使用"测试"时,项目还有一些其他变化 配置文件,但在我看来,没有任何东西可以导致这一点.有谁知道为什么VS认为我的项目不再使用代码了?
使用:visual studio 2012 Ultimate,ADO Entity Framework 6,数据库:Sql express 2014(安装在本地PC上),数据库表计数:174表.
我正在尝试使用实体数据模型向导创建数据库模型,但创建模型大约需要8个小时(对话框没有响应).
我试图重新安装visual studio和Entity Framework但同样的问题.我需要任何可以加速数据库模型创建的想法.

c# entity-framework entity-framework-4 sql-server-2012 entity-framework-5
c# ×2
.net-4.0 ×1
asp.net ×1
asp.net-mvc ×1
dbcontext ×1
intellitrace ×1
mapping ×1
performance ×1
sql-server ×1