问题标签 [ef-model-builder]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
entity-framework - 在实体框架中,如何在不实际连接到数据库的情况下对 dbmodel 构造进行单元测试?
我有一个从 DbContext 继承的类,实现了代码优先的实体框架对象。
我想要一个单元测试来在这个 dbcontext 中练习模型构建器——这对于检测“实体上未定义键”错误之类的东西很有用。
但是在单元测试期间我可能没有可用的实际数据库。有没有办法在不实际尝试与上下文建立数据库连接的情况下练习此代码。我尝试了一些无害的东西,例如:
这在技术上确实有效。但是,这需要很长时间才能运行——如果我暂停并检查调用堆栈,它将触发对 System.Data.SqlClient.SqlInternalConnectionTds.AttemptOneLogin 的调用
最终它超时,吞下连接错误并完成我的测试。
有没有办法在没有连接尝试的情况下做到这一点?
c# - 实体框架多个级联删除
我首先使用实体框架代码和迁移来开发应用程序。
我有以下类,表示当一个用户为某个产品备份另一个用户时两个用户之间的关系。User 和 Product 类没有对 UserBackup 的任何引用。此关系应映射到 dbo.UserBackup 表。用户可以为多个产品拥有多个备份用户。所以基本上只有 ProductId、BackupUserId 和 UserId 的组合在表中是唯一的。
我在上下文类中覆盖 OnModelCreating 方法,如下所示:
应用“Add-Migration”命令后生成的迁移文件包含以下代码。
但是,当我运行应用程序时,出现以下异常:
在表“UsersBackup”上引入 FOREIGN KEY 约束“FK_dbo.UserBackup_dbo.User_BackupUserId”可能会导致循环或多个级联路径。
指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束。
无法创建约束。请参阅以前的错误。
如果我删除外键约束,我不会收到错误消息。或者至少指定“ cascadeDelete: false”。但是我需要从 UserBackup 表中删除记录,以防备份用户被删除。
c# - EF Code First 一对一和一对多映射
我有以下模型,我正在尝试从相同的父实体和子实体构建一对一以及一对多的关系。一对多关系适用于我当前的映射,但我正在努力添加新的一对一关系(对于 CoverPicture 属性)。以下是相关模型和EF映射代码:
类别.cs:
图片.cs:
相关类别EntityTypeConfiguration<Category>
映射(不正确):
相关图片EntityTypeConfiguration<Picture>
映射(正确):
当我尝试为新CoverPicture
属性添加迁移时,EF 尝试向表中添加一CoverPictureId
列Category
(这是我想要的),但也CoverPictureId
向Picture
表中添加一列(这不是我想要的;Picture
已经定义和映射了一个键)。
下面是Up()
EF 搭建的迁移代码:
我究竟做错了什么?
c# - 从 Fluent API 或 ModelBuilder 约定/注释 (EF6) 生成迁移
有没有办法在 Fluent API on Model Mapping 或 ModelBuilder Conventions/Annotations 中生成下面的 ForeignKey?我正在使用EF6。
创建迁移后,我能够手动创建所需的外键更改!按预期工作......但我需要为一些外键创建一个自动化过程!
整个迁移:
c# - 实体框架 - 表需要两个指向同一个表的外键
我正在使用包含"Contacts" : Id, FirstName, LastName, MobileNumber
等表的数据库处理现有项目。
我现在想要实现一个表,我可以将成对的联系人链接在一起。我已经构建了一个名为contactMatches: Id, contact1, contact2
where的类,contact1
并且contact2
应该作为 FK 链接到 contactId 列。我正在研究使用实体框架Modelbuilder.Entity
功能为表示类的表创建数据关系。
我对数据库设计和实体框架比较陌生。这可以在一个链接表中完成,还是我需要走不同的路线?
我考虑过的另一条路线是创建表,仅将contact1
和contact2
作为整数存储,因为它仅在交叉引用数据库中的其他表时使用。这似乎很糟糕,因为该contactMatches
表可能包含不存在的contactId,因此需要防止这种情况发生......
什么是做我想做的最好的方法,有什么想法吗?
谢谢,JK
c# - 如何在 Entity Framework 6 中禁用模型缓存(代码优先方法)
按照MSDN 文档,我们可以阅读:
然后缓存该上下文的模型,并用于应用程序域中上下文的所有进一步实例。可以通过在给定的 ModelBuidler 上设置 ModelCaching 属性来禁用此缓存,但请注意,这会严重降低性能。
问题是模型构建器不包含任何名为ModelCaching的属性。
如何禁用模型缓存(例如,在运行时更改模型配置)?
sql - 实体框架模型构建器多个连接/子查询
我一直在研究如何使用多个连接(或子查询)将实体属性映射到另一个表中的列,但我真的很难找到从哪里开始。
我创建了一个 SQL Fiddle 来演示我想要做什么。User
实体应包含一个名为的属性,该属性Employee
从员工表中选择名称
http://sqlfiddle.com/#!9/cbac3/2
基本上,User
记录与Employee
使用关系表 ( UserEmployee
) 链接,但这是 1-0 关系。
我们没有使用 Ids 作为外键,而是每个Employee
都有 aEmployeeNo
并且与 a 有 1-1 关系,aCompany
有它自己的CompanyNo
,所以UserEmployee
表的复合外键由 Employee 和 Company Numbers 组成。
我无法直接链接到UserEmployee
表中的 EmployeeId,因为在实际系统中员工记录是重复的(出于历史保存原因),并且在混合中添加了第三个表。
谢谢
c# - 在使用 OnModelCreating 和 ApplicationDbContext 时解决“未定义键”错误?
我一直在尝试为我的集合类型创建导航属性,我发现了一个人如何使用 OnModelCreating 完成它的示例。我在我的 MVC 5 应用程序中试了一下,在尝试更新我的数据库时收到了这个错误:
在模型生成期间检测到一个或多个验证错误:
BlogEngine.Models.IdentityUserLogin: : EntityType 'IdentityUserLogin' 没有定义键。定义此 EntityType 的键。BlogEngine.Models.IdentityUserRole: : EntityType 'IdentityUserRole' 没有定义键。定义此 EntityType 的键。IdentityUserLogins:EntityType:EntitySet 'IdentityUserLogins' 基于没有定义键的类型'IdentityUserLogin'。IdentityUserRoles:EntityType:EntitySet 'IdentityUserRoles' 基于没有定义键的类型'IdentityUserRole'。
如何解决这些“未定义键”错误?
我做了一些搜索,找到了解决一个用户问题的解决方案,但他的需求与我的不同。对于我正在尝试做的事情,这些解决方案似乎非常复杂。
这是导致问题的代码:
这是我的具有多对多关系的模型:
更新以显示 IdentityUser:
entity-framework - 未找到 HasMany 和 WithRequired 扩展方法
我正在使用 Entity Framework 6.1 构建我的数据层类库。我创建了我的上下文并尝试执行模型构建器代码(或者它是在我执行添加迁移时派生的?
无论如何,我已经看到了很多示例,但是当我尝试在 modelBuilder.Entity() 实例上使用 .HasMany 或 .WithRequired 时,它们不会出现在 Intellisense 中。我错过了什么?
sql - EF 迁移正在删除一列并尝试将不存在的列重命名回 Id
我有一个使用 EF 的 Code First MVC 项目。
有两个表TableA
和TableB
,它们目前具有一对多的关系:
我试图改变TableA
给它一个一对零或一的关系:
TableB
保持不变,我改变了我的OnModelCreating
样子:
问题是生成的迁移是出乎意料的——对我来说是出乎意料的,因为显然我不知道自己在做什么。它不是添加 FK 并添加列,而是尝试重命名列。这是我的迁移:
我不明白为什么它试图重命名一个不存在的列,我的新 FK 在哪里?