首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Parallel中使用DbSet.Add()发现的一系列多线程问题和解决过程

4、 一个 EdmType 不能多次映射到 CLR 类。EdmType“SmsModel.MemberCard”映射了一次以上。...list里面也没有再出现null了,确认是因为多线程安全引起的异常。于是想起昨天那个问题是否也是同样的问题,再上MSDN搜了一下DbContext类和DbSet类,都是这样说的: ?...接着就给dbcontext上了锁,测试,这次总算如我所料,完美运行。但是不解的是最初那几个异常是如何产生的,List中虽然数量不够也存在为null的对象,但是并没有直接爆出异常。...循环10000次时: ? 循环100000次时: ? 得出结论就是,在执行次数超大时用线程安全类型会更慢,在执行次数较少时线程安全类型也没什么优势。 List和DbSet是非线程安全的。...虽然一番折腾下来还是回到最初,但是这过程中让我发现了意料之外问题,然后找到了原因,然后测试验证,最终得到了最优解决方案。还是那句话,填完坑,你就比之前更强大了!

44940

CSharpEntityFramework与CodeFirst实践

接下来,我们需要使用继承EF的DbContext来构建数据库上下文类,我们直接使用VS自带生成工具即可生成对应的数据库上下文模型: 点击完成后我们就得到了如下的一个配置类 public class...在这个类中,我们声明了一个DbSet属性books,这就对应了数据库中的book表。...,首先连接地址数据库用户名等等都不对,更主要的是,我是MySQL数据库,怎么能用SQL呢,所以,我们要解决EF进行MySQL的连接问题。...此迁移文件的设计器代码包含当前 Code First 模型的快照。在下一次搭建迁移基架时,将使用此快照计算对模型的更改。...删除表 为了证明EF再删除表的时候,并不会影响其他的表,我再次利用创建了一个新的实体类EBook并更新DbContext以及进行EF迁移功能: namespace CodeFirstDemo {

28310
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    关于EF Code First模式不同建模方式对建表产生的影响

    今天在学EF Code First模式的时候,发现几个很有趣的问题,问题如下: 1、当编写玩实体后,不指定任何主键约束,EF会找长的最像Id的,然后设置其为主键,验证代码如下: //User类...结论:发现EF在我没有指定那个是主键的情况下,将UserId设为了主键 2、当一个实体中有两个带Id的字段,EF会将最像Id的设为主键,优先级  Id>UserId>UserId_Id class User...EF将Id设为了主键,UserId和UserId_Id的优先级自行验证. 3、关于外键的问题,当在实体中加入导航属性,EF生成外键可能会当前实体中的其他字段的影响.验证代码如下: class PhotoInfo...EF生成了一个User_Id的外键属性,关联User表 下面修改PhotoInfo实体,代码如下: class PhotoInfo { public Guid Id {...以上都是我测试出来的关于EF默认的行为,比较片面,欢迎指正.

    98760

    使用静态基类方案让 ASP.NET Core 实现遵循 HATEOAS Restful Web API

    link, 第一个link包含着获取当前响应的链接, 第二个link则告诉客户端如何去更新该post....有两种办法: 静态类型方案: 需要基类(包含link)和包装类, 也就是返回的资源的ViewModel里面都含有link, 通过继承于同一个基类来实现....下面我们可以使用POSTMAN来测试一下效果: 首先添加一笔数据: ? 返回结果: ? 没问题, 这就是我想要的效果. 然后看一下GET: ? ? 也没问题....针对集合类返回结果 上面的例子都是返回单笔数据, 如果返回集合类的数据, 我当然可以遍历集合里的每一个数据, 然后做CreateLinksForVehicle....Value = value; } public IEnumerable Value { get; set; } } } 这里, 我把集合数据包装到了这个类的

    1.1K50

    使用两种方法让 ASP.NET Core 实现遵循 HATEOAS 结构的 RESTful API

    有两种办法: 静态类型方案: 需要基类(包含link)和包装类, 也就是返回的资源的ViewModel里面都含有link, 通过继承于同一个基类来实现....下面我们可以使用POSTMAN来测试一下效果: 首先添加一笔数据: 返回结果: 没问题, 这就是我想要的效果. 然后看一下GET: 也没问题....针对集合类返回结果 上面的例子都是返回单笔数据, 如果返回集合类的数据, 我当然可以遍历集合里的每一个数据, 然后做CreateLinksForVehicle....Value = value; } public IEnumerable Value { get; set; } } } 这里, 我把集合数据包装到了这个类的...测试一下: 不选择属性: 选择部分属性: OK. HATEOAS这部分就写到这. 其实 翻页的逻辑很适合使用HATEOAS结构. 有空我再写一个翻页的吧.

    2.4K110

    巅峰对决!Spring Boot VS .NET 6

    ,我创建了一个类 ProductOrderController, 然后使用了 @RestController 和 @RequestMapping 注解, 然后在控制器的每个方法上, 可以使用下面的注解来定义支持的..., 只需根据类的角色使用 @Component、**@Service 或@Repository** 等注解即可,在启动时,它会进行扫描,然后注册。...在这里,我做了一个负载测试,调用一个 API,通过 id 获取一个产品订单。...测试环境 CPU:Intel Core i7–8750H( 4.10 GHz),6 核 12 线程 RAM:32 GB 操作系统:Windows 11 测试设置 我使用的压力测试工具是 K6, 进行了...测试结果 显然,Golang 是最快的,我检查了两者都执行了查询优化,确认没有 N+1 问题,所以在 QPS 上 .NET Core 胜出。

    1.6K20

    寻找链表中环的入口节点

    获取该有环链表的环入口节点(即:节点8) 链表中是否有环 首先,我们需要确保链表中是否包含一个环,在上篇文章(获取链表中倒数第K个节点)中我们用双指针的思路解决了问题,那么,我们也尝试下能否用双指针来解决这个问题...定义两个指针,从链表的头节点出发 第一个指针每次走一步,第二个指针每次走两步 走得快的指针追上了走得慢的指针,那么链表中就包含环 走得快的指针到了链表的末尾都没有追上第一个指针,那么链表就不包含环 IMG_C6505EF145D3...在前面提到的判断一个链表中是否有环时用到了一快一慢两个指针。如果两个指针相遇,则表明链表中存在环。...p1、p2指针指向判断链表中有环时的相遇节点 p1指针继续向前移动,边移动边计数 p1指针与p2指针再次相遇时,即可得到环中节点数量 IMG_584FEB598A64-1 实现代码 通过上面的分析,我们已经得到了解决问题的思路...,将其指向链表头部 p1、p2指针以相同的速度向前移动,两者相遇处正好是环的入口节点 声明一个变量用于记录节点总数量 p2指针不动,移动p1指针,每移动一次记录总数量的变量就自增一次 p2、p1相遇时,

    90520

    张高兴的 Entity Framework Core 即学即用:(一)创建第一个 EF Core 应用

    使用 LINQ 不再需要编写复杂的数据库访问代码; EF Core 支持大部分流行的数据库,切换数据库时只需要更改数据库访问驱动,并不需要更改业务逻辑。...每一篇博客在介绍功能点时都附带有简单的示例,每一章的最后还附有若干个小练习,希望读者可以借着练习帮助理解,之后根据项目中遇到的问题再学习其他的内容。...项目依赖 使用 Scaffold-DbContext 命令生成实体类 手动创建实体类 实体属性 表的映射 列的映射 主键的映射 导航属性 创建数据库上下文 从数据库中查询 准备工作 准备工作包含两部分...EF Core 对 PostgreSQL 的版本没有要求,但后续的博客在介绍编写实体类生成工具时要求 12 及以上的版本。...试着编写剩下的实体类; 2. 比较一下 Database First 生成的实体类和数据库上下文,与手工编写的有何不同; 3.

    2.5K10

    【初学者指南】在ASP.NET MVC 5中创建GridView

    例如: DOM JavaScript的 Ajax Server-side processing 我最喜欢的选项之一是, jQuery 数据表不但支持客户端搜索、分页、排序等,而且还提供了一个可以在服务器端处理的选项...在模板中选择 MVC,如果编写了应用的单元测试,请先做检查,并点击 OK。 我们的工程都是用基本的功能创建的。现在,我们开始创建数据库上下文类,这个类将会被 Data Access 实体框架使用。...在写控制器代码之前,我们需要为实体框架配置连接字符串,以便在操作数据库时来连接数据库。因此,我们的连接字符串应该被指定给一个有效的数据源,以便我们在运行时应用不会被打断。...但是现在还有一个问题,那就是这是在客户端处理的,当行为被调用时,所有数据会被视图渲染,这样就会造成当大量数据出现时,页面性能变慢或者页面载入时间增加。...在下一篇文章中,我们将会学习到如何通过使用服务器端分页、排序和过滤来使页面呈现的更好。对于具有大量的数据时,这是一个更好的方法。

    6.2K90

    ASP.NET MVC5高级编程——(3)MVC模式的模型

    当使用EF的代码优先方法时,需要使用从EF的DbContext类派生出的一个类来访问数据库。...该派生类具有一个或多个DbSet类型的属性,类型DbSet中的每一个T代表一个想要持久保存的对象。...4.2使用数据库初始化器--每次插入初始数据-方便项目测试 保持数据库和模型变化同步的一个简单方法是允许实体框架重新创建一个现有的数据库。...4.3播种数据库 很多时候,我们在编写程序的同时需要测试,但此时数据库中没有数据,此时可以创建一个DropCreateDatabaseAlways的派生类并重写其中的Seed方法,Seed方法可以为应用程序创建一些初始化的数据...,该属性包含当用户选择一个指定项时使用的值(键值 ,像52或2) 第3个参数是每一项要显示的文本 第4个参数包含了最初选定项的值 5.2 模型和视图模型终极版 针对专辑的编辑情形,模型对象(Album对象

    4.8K40

    Entity Framework Core 2.0 入门

    可以在Context里面override这个Onconfiguring方法: 有一个错误, 应该是Server=localhost; (这里无需调用父类的方法, 因为父类的方法什么也没做)....这个快照文件解决了老版本Entity Framework的一个顽固的团队问题. 使用迁移文件创建脚本或直接生成数据库....也可以通过指定--output参数来输出到具体的文件. 这里, 常规的做法是, 针对开发时的数据库, 可以通过命令直接创建和更新数据库....在老版本到ef里, migration历史表里面还保存着当时到迁移的快照, 创建迁移的时候还需要与数据库打交道. 这就是我上面提到的如果团队使用ef和源码管理的话, 就会遇到这个非常令人头疼的问题....这里列一下可触发查询的Linq方法: 还有个两个方法是DbSet的方法, 也可以触发查询动作: 上面这些方法都应该很熟悉, 我就不写了.

    3.5K140

    ASP.NET 6 使用工作单元操作 MongoDB

    大家好,我是Edison。 最近工作中需要用到MongoDB的事务操作,因此参考了一些资料封装了一个小的组件,提供基础的CRUD Repository基类 和 UnitOfWork工作单元模式。...如果你只是一个单点的mongo实例,是无法进行多文档事务实践的。 画外音:如果你对MongoDB感兴趣,不妨看看我的这个系列博客:《MongoDB入门到实践学习之旅》 那么,如何快速进行事务操作呢?...这里暂且设计一个MongoDbConnection类,用于包裹这个MongoClient,然后将其以单例模式注入IoC容器中。...,设计一个MongoDbContext,它从IoC容器中获取到单例的MongoClient,封装了事务的开启和提交,简化了应用代码的编写。...RepositoryBase类,将CRUD的方法都封装了,我们实际中就只需要创建一个对应的Repository集成这个RepositoryBase就行了,无需再重复编写CRUD的方法。

    33410

    Entity Framework Core 2.0 入门

    可以在Context里面override这个Onconfiguring方法: 有一个错误, 应该是Server=localhost; (这里无需调用父类的方法, 因为父类的方法什么也没做)....这个快照文件解决了老版本Entity Framework的一个顽固的团队问题. 使用迁移文件创建脚本或直接生成数据库....也可以通过指定--output参数来输出到具体的文件. 这里, 常规的做法是, 针对开发时的数据库, 可以通过命令直接创建和更新数据库....在老版本到ef里, migration历史表里面还保存着当时到迁移的快照, 创建迁移的时候还需要与数据库打交道. 这就是我上面提到的如果团队使用ef和源码管理的话, 就会遇到这个非常令人头疼的问题....这里列一下可触发查询的Linq方法: 还有个两个方法是DbSet的方法, 也可以触发查询动作: 上面这些方法都应该很熟悉, 我就不写了.

    3.2K80

    Do You Kown Asp.Net Core - 根据实体类自动创建Razor Page CURD页面模板

    Scaffolding Template Intro 我们知道在Asp.Net MVC中,如果你使用的EF的DBContext的话,你可以在vs中通过右键解决方案-添加控制器-添加包含视图的控制器,然后...)功能,使我们每次对于一个Model需要进行4-5个页面和PageModel的编写,代码量比Asp.Net MVC多了不少,好在ST及时出现,不过这次并没有结合到VS中,我们需要通过添加一个生成包及CMD...Hello Scaffolding Razor Page Step 1 : 创建Razor Page 项目 Step 2 : 创建一个Model,在这里我们创建一个Blog实体类: public class.../Index"); } 可以看到 它使用了Blog作为实体类的集合名了,但在Step 3中,我使用的是Blogs,这应该是个bug,想提交的,但没有找到相应的项目。...写在最后 后天就是伟大的祖国生日了,大家节日快乐!明天去HK迪士尼 好期待,嘿嘿。 后面我会把用Razor Page遇到的问题总结放上来,非常看好它,相信会越来越火的。

    1.1K60

    初识ABP vNext(11):聚合根、仓储、领域服务、应用服务、Blob储存

    聚合根 仓储 领域服务 BLOB储存 应用服务 单元测试 模块引用 前言 在前两节中介绍了ABP模块开发的基本步骤,试着实现了一个简单的文件管理模块;功能很简单,就是基于本地文件系统来完成文件的读写操作...按照DDD的思路,这里的File应该是一个聚合根。...,它仅包含BLOB的一些基本抽象,想要BLOB系统正常工作,还需要为它配置一个提供程序;这个提供程序暂时不管,将来由模块的具体使用者去提供。...针对以上内容做一个简单的测试,首先为Blob系统配置一个提供程序。...最后结合前端测试一下吧: 最后 以上就是本人所理解的abp模块开发一个相对完整的流程,还有些概念后面再做补充。因为这个例子比较简单,文中有些环节是不必要的,需要结合实际情况去取舍。

    1.9K20

    Entity Framework Core 实现全局查询过滤

    p.IsDelete); base.OnModelCreating(modelBuilder); } } 上面这段代码大部分人看完一定觉得没有问题,但是我要告诉各位的是这段代码有一个很大的问题...,就是每次去操作 Employee 或 Department 实体时都会应用 HasQueryFilter , 那么如果由几十个甚至上百个 Model 的时候,如果按照上述的方式来编写代码的话那么我们将会配置...那么问题来了,着这种情况下我们应该怎样支持多租户,应该怎样实现软删除,以及应该怎样实现模型查询过滤的自动检测。下面我们就来一个问题一个问题的讲解。...首先利用 DependencyContext 获取运行时程序集,将获得的程序集添加到集合中,然后查找出继承自基类 BaseModel 的程序集,如果查找到了就返回,如果没有查找到就实现全局过滤缓存,代码如下...); assemblies.Add(assembly); } return assemblies; } } 二、应用 上一小节我们查找到了继承基类的所有实体

    1.1K10

    【我们一起写框架】领域驱动设计的CodeFirst框架(一)—序篇

    虽然,领域驱动设计很复杂,但,我认为它是值得我们付出时间和心血学习的。 因为,驱动领域设计是技术思维的一个分水岭,学会了这种技术思维后,会对框架设计的理解更上一个台阶。...当ProxyCreationEnabled属性设置为True时,我们一旦运行系统,系统会自动的,数据模型同步到数据库,并且会创建一个__MigrationHistory表,来记录同步的内容。...我这里只是为了简单的实现,所以将ProxyCreationEnabled设置为了True】 接下来,我们定义了一个public virtual DbSet Kiba_User {...然后我们重写了OnModelCreating方法,在OnModelCreating里,把我们刚刚建立的映射关系添加了进去,这样数据库的表,就被我们立体的加载到了代码世界。...在KibaDDD项目建立测试类——TestRun;代码如下: public class TestRun { public TestRun() { Kiba_UserRepo

    57230
    领券