问题标签 [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.

0 投票
1 回答
117 浏览

asp.net - 模型生成器再添加一列?

我首先使用 EF 代码。

这是我的模型师

和状态类:

和市场类:

当然,我删除了额外的代码。

问题是当我使用此代码时,State_StateId 列会添加到数据库中的我的 Market 表中,并且当我不使用模型构建器时,消息循环代码发生错误并且......(我说我删除了额外的代码),所以怎么能我首先使用没有这个“State_StateId”额外列的代码。

请原谅我的英文写作不好。

0 投票
1 回答
4371 浏览

entity-framework - 无法将 DbModelBuilder 和 .HasRequired() 添加到 modelBuilder

我正在尝试在我的 API 中创建模型构建器,但似乎无法添加.HasRequired()到我的代码中。我假设这是因为它存在于内部DBModelBuilder,但是,我也不能添加。

它只允许我使用ModelBuilder. 否则会抛出错误:OnModelCreating(DbModelBuilder): no suitable method found to override

我在这里错过了什么吗?

我的 DbContext 看起来像这样:

更新

我(作为测试)从头开始了一个新项目。我使用 Web API 模板创建了一个新的 ASP.NET 5.0 项目。我的项目立即无法识别DbModelBuilder。我添加了对 EntityFramework.dll 的引用,但仍然没有好处。然后我添加using System.Data.Entity;并接受DbModelBuilder,但仍然抱怨找不到命名空间“DbModelBuilder”。

我不明白我怎么能在一个全新的项目中预先出现这个错误?

一旦我尝试从 NuGet 添加包 Entity Framework,我就会收到更多错误,即版本 6.1.3 与 DNX Core 5.0 不兼容

我似乎找不到任何这些错误的示例/解决方案。

更新 2

我现在设法通过将 EntityFramework.dll 引用添加到 DNX Core 5.0 程序集以及 DNX 4.5.1 程序集来识别 DbModelBuilder,但是,现在它已经引发了更多错误,需要添加 System.Core 和 mscorlib。我真的不敢相信创建一个(我认为很简单的)Web API 项目有多么麻烦。

0 投票
1 回答
451 浏览

foreign-keys - EF6 Code First Composite Primary AND Foreign Keys:必须映射外键

好吧,在一个早上把我的头撞在墙上之后,我把它扔在那里了。

我有一个带有复合 PK(Column1、Column2、Column3)的 DB 表(Table1)。(Column1,Column3) 也是另一个表 (Table2) 的 FK。

尝试使用 Code First EF6 (6.1.3),这是模型:

我的模型构建器(流利的 API):

也许我在 Object2 中缺少 ICollection 的东西?

我收到一条错误消息,提示“从表 Object1 (Column1, Column3) 到表 Object2 (Column1, Column3):: Insufficient mapping: Foreign key must be mapped to some AssociationSet 或 EntitySets 参与外键关联概念方面。”

我试过了:

无济于事。我收到“在 Object2 上声明的 FirstObjects 已配置有冲突的外键”错误。

这是从现有数据库生成的 CodeFirst。

0 投票
1 回答
663 浏览

c# - 实现 EntityTypeConfiguration 类后可以使用 ASP.NET MVC + EF 脚手架吗?

背景

当模型使用数据注释或内部的直线OnModelCreating(DbModelBuilder)来描述它们的特征时,用于绑定到实体框架的新 ASP.NET MVC 控制器的 Visual Studio 脚手架可以很好地工作。

问题

但是,在我们的场景中,使用单个类OnModelCreating重构的内容。EntityTypeConfiguration<T>尝试通过 MVC+EF 脚手架创建新控制器时,会出现以下弹出错误:

运行所选代码生成器时出错:“已添加 SomeModelClass 类型的配置。要引用现有配置,请使用Entity<T>()or ComplexType<T>()方法。

是否有修复(例如自定义代码或项目配置)?

0 投票
1 回答
294 浏览

c# - EF6 根据包含类的属性设置属性的 MaxLength

情况:

我有一个基类Lookup,如下:

我还创建了一个属性IsLookup

目标是能够创建以下声明:

...并用于OnModelCreatingMaxLength属性 Description 设置为 40。

我已经能够编写一些看起来应该可以工作的东西,并且add-migration运行得很好,但是生成的迁移没有设置 maxlength:

结果是:

所以,问题是......为什么描述没有在迁移代码中设置它的长度?这甚至可能吗?

<gripe>如果有调试的方法add-migration,这会容易得多。</gripe>

0 投票
1 回答
2459 浏览

entity-framework-core - EF7 属性生成器中的 `Has...` 和 `ForSqlServerHas...` 扩展方法有什么区别?

Entity Framework 7(Entity Framework Core)在PropertyBuilder. 第一个似乎是“通用”集:

  • HasDefaultValueSql
  • 有列名
  • HasColumnType
  • HasComputedColumnSql
  • 有默认值

然后是“ForSqlServer”的匹配集:

  • ForSqlServerHasDefaultValueSql
  • ForSqlServerHasColumnName
  • ForSqlServerHasColumnType
  • ForSqlServerHasComputedColumnSql
  • ForSqlServerHasDefaultValue

似乎还有一种额外的“ForSqlServer”扩展方法没有“通用”对应物:

  • ForSqlServerUseSequenceHiLo

两组之间有什么区别,我什么时候使用哪一组?

0 投票
0 回答
153 浏览

entity-framework - 请参见 通过 modelBuilder 创建数据库查询

目前我正在一个项目中工作,该项目需要向后兼容(非 EF)数据库,但也想从模型创建一个新数据库。

对于此任务,我将当前架构保存在某处(以 XML 形式)并使用原始 sql 更新步骤更新数据库,直到它们与架构匹配,这工作正常。

此外,modelBuilder 与当前模式匹配(如,我的算法发现 context.Database.Create() 新创建的数据库与我保存的模式之间没有区别)。

由于架构很可能在开发的后期阶段发生变化,因此我必须支持两种创建最新数据库的方法,并且想知道是否可以将这两种方式结合起来 - 因为现在我必须更新保存的目标架构,创建更新步骤并更新我的模型构建器,以便准确创建我需要的数据库——这将是一项相当乏味的任务。

因此,由于可能无法将我的模式“翻译”为 modelBuilder 条目,并且因为我的 POCO 类中有更多未映射的信息(这禁止更新正确的数据库并首先更新我的类数据库的方法)唯一的(对me) 方法是以某种方式收集 CREATE TABLE 语句,当我调用 Database.Create() 时,上下文将创建它,我可以使用它来更新我的模式和相应的更新步骤。

我很确定我可以通过在调用 Create() 方法时记录上下文来做同样的事情,但是 - 这需要相当长的时间,会发出一些我不需要的查询,并且会创建一个我必须摆脱的转储数据库之后每次我更新我的模型。

所以我想知道是否有一种方法可以检查模型构建器(当然也可以是上下文),并以某种方式查看表映射到的样子。

0 投票
2 回答
583 浏览

entity-framework - 对实现接口的所有类型都有特定的属性配置,除了一个

我有许多从接口“IEventReportElement”继承的类型,它公开了属性“IdEventReport”:

这是一个可为空的属性,因为我并不总是能够立即正确填写它,但在数据库中不应为空。

这就是我添加该行的原因

到我在 DbContext 中的 OnModelCreating 方法。

但是,“位置”类型必须实现此接口,但不应在数据库中具有属性“IdEventReport”的列,而是它公开的属性“IdParent”的列。

和模型构建器中的部分

但是,这在尝试创建数据库时已经引发了异常:

System.InvalidOperationException:属性“IdEventReport”不是“Position”类型的声明属性。使用 Ignore 方法或 NotMappedAttribute 数据注释验证该属性是否已从模型中显式排除。确保它是有效的原始属性。

尽管这可能是有效的,但是否无法覆盖特定类型的给定类型配置?我是否必须将 .IsRequired() 行添加到实现此接口的所有其他类型,或者是否有其他方法可以克服这个问题?

0 投票
3 回答
69 浏览

c# - 一对零...一种关系

我似乎无法正确理解 FooBar之间的关系。

有了这个结构,我通常会有

在 Foo 中,但在这种情况下,这不是我的数据的可行表示。

你看....

Foo并不总是有一个Bar ...但是... Bar总是有一个Foo并且它的 FooId 在Bar中总是唯一的。

我已经尝试过多次尝试定义这种关系,但似乎无法做到正确!如果这将使我能够做我想做的事(但我不希望这样做),我也可以向 Foo 添加一个可为空的 BarId。(见编辑1)

我已经用谷歌搜索了很多(并搜索并尝试了),许多类似(但不相同)的堆栈溢出帖子。

任何输入将不胜感激。

谢谢


编辑1(回应消费者评论):

这些表已经存在于许多实时环境中并且充满了数据,所以我想在不编辑 db 表定义的情况下找到一个解决方案......但如果这不可能,我可以添加一个列来实现我需要的。

以前我把它定义为...

...但这不适用于我使用这些表编写的一段代码。


编辑2:

当我尝试添加 Bar 时,上面的代码给出了以下错误。

“当 IDENTITY_INSERT 设置为 OFF 时,无法为表 'Bar' 中的标识列插入显式值。”

身份插入未关闭,我将它用于所有表,除非在这种情况下,EF 似乎根据我对这些表的定义将其关闭。

0 投票
3 回答
20402 浏览

c# - EF Core:同时使用 ID 作为主键和外键

我有两个实体,Prospect并且Person,我想要做的是Prospect.ID用作表上的主键Prospect和外键PersonID,我的想法是对两个实体使用相同的 ID,而不需要PersonID在我的Prospect实体上使用 a。PersonID当潜在客户保存在数据库中时,即使我的实体上没有此属性,它也会尝试保存一个Prospect,我想知道 EF 核心是否支持这种关系。

这是我在模型构建器上得到的:

这是在数据库上执行的内容:

PersonDto

ProspectDto

DtoBase

谢谢。