标签: entity-framework-6

Async PartialView导致"HttpServerUtility.Execute被阻止..."异常

我有一个部分视图,尝试IEnumerable<Post>使用异步从数据库中检索a ...

方法

public static class PostService
{
    public static int PostsPerPage = 50;

    public static async Task<IEnumerable<Post>> GetRecentAsync(int page = 0)
    {
        return await entityFrameworkDbContext.Posts
            .ToListAsync();
    }
}
Run Code Online (Sandbox Code Playgroud)

PartialView

public async Task<ActionResult> Recent(int page = 0)
{
    return PartialView(await PostService.GetRecentAsync(page));
}
Run Code Online (Sandbox Code Playgroud)

然后,如果我试着打电话给它

@Html.Action("Recent", "Post")
Run Code Online (Sandbox Code Playgroud)

我得到以下异常

HttpServerUtility.Execute在等待异步操作完成时被阻塞.

描述:执行当前Web请求期间发生未处理的异常.请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息.

异常详细信息:System.InvalidOperationException:HttpServerUtility.Execute在等待异步操作完成时被阻止.

为什么我会收到此错误?不应该工作吗?

c# asp.net-mvc entity-framework entity-framework-6 asp.net-mvc-5

79
推荐指数
2
解决办法
4万
查看次数

Database.BeginTransaction vs Transactions.TransactionScope

System.Transactions.TransactionScope和EF6有什么区别Database.BeginTransaction

有人可以给出一个小例子,或者只是解释哪一个有明显区别?

PS:在我的项目中,我使用的是EF6.我已经阅读了文档,但它没有多大帮助.还查看了这些示例,但它们正在使用SqlConnection.BeginTransaction,现在MS已经Database.BeginTransaction在EF6中引入了这个新功能.

c# entity-framework transactions transactionscope entity-framework-6

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

实体框架6事务回滚

使用EF6,您可以使用以下新事务:

using (var context = new PostEntityContainer())
        {
            using (var dbcxtransaction = context.Database.BeginTransaction())
            {
                try
                {
                    PostInformation NewPost = new PostInformation()
                    {
                        PostId = 101,
                        Content = "This is my first Post related to Entity Model",
                        Title = "Transaction in EF 6 beta"
                    };
                    context.Post_Details.Add(NewPost);
                    context.SaveChanges();
                    PostAdditionalInformation PostInformation = new PostAdditionalInformation()
                    {
                        PostId = (101),
                        PostName = "Working With Transaction in Entity Model 6 Beta Version"
                    };

                    context.PostAddtional_Details.Add(PostInformation);
                    context.SaveChanges();

                    dbcxtransaction.Commit();
                }
                catch
                {
                    dbcxtransaction.Rollback();
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

当事情横盘整理时,实际上需要回滚吗?我很好奇,因为提交描述说:"提交基础商店交易."

而回滚描述说:"回滚基础商店交易."

这让我感到很好奇,因为在我看来,如果没有调用Commit,先前执行的命令将不会被存储(这对我来说似乎是合乎逻辑的).但如果是这种情况,那么调用Rollback函数的原因是什么?在EF5中我使用了TransactionScope,它没有回滚功能(只有一个完整的),这对我来说似乎是合乎逻辑的.由于MS …

c# sql-server entity-framework transactions entity-framework-6

73
推荐指数
3
解决办法
6万
查看次数

添加 ADO.Net 实体框架给出“项目的目标框架不包含实体框架运行时程序集”

我在 VS2022 中的解决方案中添加了一个新的 .Net 6.0 项目。安装了EntityFramework 6.4.4。现在尝试install-package entityframework将 ADO.Net 实体框架模型添加到项目中。我收到错误:

该项目的目标框架不包含实体框架运行时程序集。请查看项目属性页面上的目标框架信息。

我尝试添加其他几个 EF 包(根据此处的文档,这应该不是必需的: https: //learn.microsoft.com/en-us/ef/ef6/fundamentals/install)。我认为问题出在我的安装上,但我创建了一个包含问题的 .Net 6.0 控制台应用程序并将其发送给同事,他收到了相同的消息。

还在这里找到了这个主题:在 Visual Studio 2022 上添加实体框架模型,但那里没有答案。

重现步骤:

  1. 创建 .Net 6.0 控制台应用程序。
  2. install-package entityframework使用包管理器控制台窗口安装 EF6 包。
  3. 右键单击解决方案并选择“添加”=>“添加项目”。
  4. 在左侧窗格中单击“数据”。
  5. 选择“ADO.Net 实体框架模型”。
  6. 单击“添加”。

在此输入图像描述

出现错误:

在此输入图像描述

entity-framework-6 .net-6.0 visual-studio-2022

72
推荐指数
6
解决办法
7万
查看次数

实体框架6 GUID作为主键:不能将值NULL插入列'Id',表'FileStore'; 列不允许空值

我有一个主键"Id"的实体,它是Guid:

public class FileStore
{
    public Guid Id { get; set; }
    public string Name { get; set; }
    public string Path { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

还有一些配置:

protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
    modelBuilder.Entity<FileStore>().Property(x => x.Id).HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
    base.OnModelCreating(modelBuilder);
}
Run Code Online (Sandbox Code Playgroud)

当我尝试插入记录时,我收到以下错误:

无法将值NULL插入列'Id',表'FileStore'; 列不允许空值.INSERT失败.\ r \n语句已终止.

我不想手动生成Guid.我只想插入一条记录Id并由SQL Server生成.如果我设置.HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity),则Id列不是SQL Server中的标识列.

如何配置实体框架以在SQL Server中自动生成Guid?

c# entity-framework sql-server-2008 entity-framework-6

71
推荐指数
6
解决办法
10万
查看次数

检查是否有任何待保存的更改

有没有办法在实体框架中找出我的实体上下文中是否有未保存的更改?

entity-framework entity-framework-4 entity-framework-5 entity-framework-6

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

延迟加载与预先加载

实体框架中的延迟加载是加载和访问相关实体时发生的默认现象.然而,急切加载是指强制加载所有这些关系的做法.我遇到的问题是,在什么情况下,急切加载可能比延迟加载更有益.问这个,因为很明显延迟加载更加资源友好,即使我们使用这个ToList()方法,我们仍然可以利用延迟加载行为.但是,我认为可能延迟加载会增加对实际数据库的请求数量,这也许是开发人员使用该Inlcude方法强制加载所有关系的原因.例如,在MVC 5中使用Visual Studio自动搭建时,在控制器中自动创建的Index方法总是使用Eager Loading,而且我总是有一个问题,即在这种情况下Microsoft默认使用Eager Loading.

如果有人向我解释,在什么情况下,渴望加载比延迟加载更有益,我会很感激,为什么我们一直使用它,同时有更多的资源友好作为延迟加载.

c# entity-framework entity-framework-6

63
推荐指数
6
解决办法
7万
查看次数

如何在使用Entity Framework 6.1和MVC 5从数据库中使用Code First后同步模型?

假设

  • 使用EF 6.1,MVC 5,VS 2013,C#

  • 我有一个在Toad DM for SQL Server中设计的现有数据库模型,并且保持它始终更新非常重要

步骤和笔记

  1. 使用ADO.NET实体数据模型我从数据库中选择Code First(EF 6.1中的新功能)来生成模型.注意:模型类和DbContext类成功生成但生成了NO .edmx或.tt文件.

  2. 接下来,我使用Entity Framework添加了一个新的脚手架项:带有视图的MVC 5控制器.注意:生成成功,控制器和视图

从现在开始,我不想使用Code First来更新我的数据库.相反,我希望根据数据库更改来更新模型.接下来做什么?如果我没有edmx文件,我将无法从数据库更新我的模型类?

c# ef-code-first ef-database-first entity-framework-6 asp.net-mvc-5

57
推荐指数
3
解决办法
4万
查看次数

"代码优先从数据库"模板未在Visual Studio实体数据模型向导中显示

根据Microsft,在本文中,当在步骤3中的"ADO.NET实体数据模型"下向项目添加新项时,应该会看到"Code First From Database"选项.

我只看到以下内容 在此输入图像描述

我使用nuget安装了EF 6.1,我使用的是Visual Studio 2012 Ultimate ..我错过了什么?

c# entity-framework visual-studio-2012 entity-framework-6

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

如何在EF6 Code First中创建与枚举对应的表?

我已经跟踪MSDN如何处理EF6的Code First中的枚举.它起作用,但是在创建的表中引用枚举器的字段是一个简单的int.

我更喜欢生成第二个表,其值将遵循C#代码中枚举数的定义.因此,我不想仅在MSDN上的示例中获取与Department对应的表,而是还希望看到由Faculty中的项填充的第二个表.

public enum Faculty { Eng, Math, Eco }     

public partial class Department 
{ 
  [Key] public Guid ID { get; set; } 
  [Required] public Faculty Name { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

在研究这个问题时,我偶然发现了一个解决方案,它建议为枚举创建一个表并通过种子显式填充它.

在我看来,这是一种繁琐的方法和许多应该自动处理的工作.毕竟,系统知道构成枚举的实际值.从数据库的角度来看,它仍然是数据行,就像我创建的实体一样,但从OO方面来说,它实际上并不是一个数据 - 而是一种类型(松散表达),它可以假设一个有限的和预先知道的状态数.

是否建议"手动"填充表格的方法?

c# enums entity-framework ef-code-first entity-framework-6

55
推荐指数
5
解决办法
4万
查看次数