标签: entity-framework-5

.NET 4.0上的实体框架5 - DatabaseGeneratedOption.Identity未定义

我需要在.NET 4上使用EF5,并且在使用HasDatabaseGenerationOption.Identity映射我的类时遇到了引用问题,该版本在4.0版本的库中不存在.

以下是失败的:

this.Property(t => t.DeploymentLogId)
              .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
Run Code Online (Sandbox Code Playgroud)

有谁知道一项工作?

entity-framework .net-4.0 entity-framework-5

13
推荐指数
3
解决办法
2万
查看次数

实体框架5升级后,左右键的多对多关系会被翻转

我有一些代码可以在代码中保存多对多的关系.它与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)

c# sql-server entity-framework entity-framework-5

13
推荐指数
2
解决办法
5552
查看次数

Entity Framework 5模型首先 - IDisposable在哪里消失了?

首先在Entity Framework 5模型中,由于生成类文件的方式,似乎存在一些重大更改(不再生成代码,但是T4模板)

2个例子:

  • 生成的上下文文件不再实现IDisposable
  • 没有一个构造函数不再需要连接字符串

是否有更多的突破性变化?他们的解决方案是什么?

entity-framework entity-framework-5 ef-model-first

13
推荐指数
2
解决办法
8193
查看次数

在同一页面上创建新的父级和子级

我的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

13
推荐指数
1
解决办法
1万
查看次数

实体框架Code First - 为SqlQuery配置映射

我正在使用Entity Framework 5(使用Code First方法)从带有参数的遗留存储过程填充我的一类,这很正常(详情如下).我的问题是我想将列的名称映射到具有不同名称的属性(我不喜欢来自Erp的名称).我尝试使用Configuration类(就像我映射到视图或表时所做的那样)来为具有不同名称的属性指定列名,这是我的结果:

  • 如果我不使用配置类(我不在DbContext的OnModelCreating方法中添加它),那么EF工作但只加载与列名称完全匹配的属性(这就是我在此期望的案件); 其他财产是空的;
  • 如果我使用配置类(在DbContext的OnModelCreating方法中将其添加到modelBuilder),则EF会引发一个异常,指出"数据读取器与指定的'... Item'不兼容.该类型的成员,'说明',数据读取器中没有相应的列具有相同的名称",这对我来说听起来很奇怪,因为在配置中我指定属性Description映射到列ItemDescription.

为什么配置会影响我的结果,但其规范不用于映射列?有没有其他方法使用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

13
推荐指数
1
解决办法
1万
查看次数

EF5迁移种子AddOrUpdate具有可为空的选择条件

我有一个问题,有人可能在过去找到了解决方案.我正在使用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)

ef-migrations entity-framework-5

13
推荐指数
2
解决办法
2224
查看次数

为什么调试模式下DbContext.SaveChanges要慢10倍

有人可以解释一下

  1. 为什么DbContext.SaveChanges在调试模式下比生产模式慢~10倍?
  2. 有什么方法可以加快速度吗?

在调试模式下,如果我在没有调试的情况下启动项目,我的网页加载时间为116秒,而加载时为15秒.

我已经设置了跟踪语句,并确定在调试模式下,在我的DbContext.SaveChanges方法中花费了大约116秒.

运行项目而不调试在同一部分中花费7秒钟.

如果您想了解更多信息,请在评论中告诉我.

项目设置:

  • ASP.NET网页
  • VS2012
  • SQLServer2012
  • 实体框架5.0

附加信息:(如果您需要更多,请在评论中告诉我)

  • SaveChanges方法的累积sql查询数为20,000
  • 生产连接字符串:数据源= PC-DEV;初始目录= aspnet-2013-06-04;集成安全性= True; MultipleActiveResultSets = True;应用程序名称= EntityFrameworkMUE
  • Debug Connection String:Data Source = PC-DEV; Initial Catalog = aspnet-2013-06-04; Integrated Security = True; MultipleActiveResultSets = True; Application Name = EntityFrameworkMUE
  • 我也经历过与LocalDB相同的相对性能作为支持数据库

更新:

正如@ruionwriting建议的那样,我描述了数据库,我发现,无论项目是在调试模式还是生产模式下运行,~2,000 sql命令都会花费相同的时间.(每个命令0毫秒).

但是,在调试模式下,20,000个命令之间的平均绝对时间差为5ms.

与生产模式相比,该组命令的平均时间差为0.3 ms.

这是大约10倍的时间性能差异,并将实体框架隔离为在调试模式下花费额外时间.

有没有办法配置调试版本,以便可以在没有调试标志的情况下引用EntityFramework?

如果我以某种方式通过一些编译器魔术来实现性能,那么在调试功能方面我会失去什么?目前我无法进入实体框架代码,所以我认为我不会错过任何东西.

谢谢!

asp.net performance intellitrace dbcontext entity-framework-5

13
推荐指数
1
解决办法
3137
查看次数

抛出异常后,我可以继续使用DbContext吗?

我知道在使用Entity Framework时可以产生异常的两种不同场景DbContext:

  1. 枚举一个查询(可以抛出一个EntityCommandExecutionException)
  2. 打电话SaveChanges(可以扔一个DbUpdateException)

在单个实例中DbContext,我想要捕获这些异常,尝试恢复(如果适用),然后重复操作.

具体来说,如果SaveChanges由于死锁而抛出异常的调用,我想重试调用SaveChanges.我已经知道如何检测这种情况并执行重试.

我在这里看到了这个答案,它表明在死锁后不应该使用SQL连接.这表明我应该重新启动整个DbContext和更高级别的操作以从这些异常中恢复.

我不确定的是,DbContext在抛出异常之后继续使用它是否安全.它会进入无法使用状态吗?它仍然可以工作但功能不正确吗?将SaveChanges事务不再发生?

entity-framework entity-framework-5

13
推荐指数
1
解决办法
4888
查看次数

"执行代码优先迁移"复选框从我的发布配置文件中消失

我正在使用Web部署首先使用EF5代码部署MVC4应用程序.我创建了一个名为"development"的发布配置文件,它使用"执行代码优先迁移"复选框对应用程序和数据库进行Web部署,以便在应用程序启动时运行迁移.出版工作有一段时间了.在某些时候,我添加了一个名为"test"的新发布配置文件,以部署到另一台服务器,该服务器使用部署的ftp方法而不进行自动迁移.这也很好.但是,当我再次尝试使用旧的"开发"发布配置文件时,VS会自动将设置更改为dbDacFx方式("更新数据库"复选框而不是"执行代码优先迁移"),我无法将其恢复为它的方式.使用"测试"时,项目还有一些其他变化 配置文件,但在我看来,没有任何东西可以导致这一点.有谁知道为什么VS认为我的项目不再使用代码了?

asp.net-mvc-4 ef-migrations entity-framework-5

13
推荐指数
2
解决办法
4786
查看次数

实体数据模型向导太慢(SQL数据库)

使用: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

13
推荐指数
2
解决办法
7459
查看次数