问题标签 [ef-database-first]

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 投票
2 回答
1929 浏览

asp.net-mvc - EF 数据库优先 - 向现有模型添加新模型

所以我有一个数据库并从中创建了一个模型。一切正常。但现在我想向我的数据库添加更多表并从中生成模型。

首先使用 EF 数据库有可能吗?我是否必须重新创建所有模型才能添加新模型?当然,所有表都来自同一个数据库。

示例:假设我有Table1Table2Table3。通过DBContextGenerator在 VS 中使用,我从.edmx文件中生成了模型。所以我有Model1, Model2, 和Model3对应的数据库表,我想添加Table4and Model4

我必须重新创建所有内容还是可以以某种方式添加?

0 投票
1 回答
65 浏览

vb.net - 使用 edmx 将逗号分隔的项目转换为实体

是否可以将列(存储为逗号分隔)转换为在 edmx 设计器中显示为另一个实体?

表结构

EDMX 设计器结构将是

如果是这样,有人可以指出我如何在 EF 设计器上做到这一点。

注意:我无法更改表结构,我首先使用数据库

谢谢

0 投票
4 回答
7706 浏览

c# - 如何将导航属性名称更改为有意义的名称

我将 Database First 与 Entity Framework 5 一起使用。我们有两个表(大大简化):

  • 地址
    • 街道
    • 城镇(等)
  • 顾客
    • 姓名
    • 帐单地址
    • 邮寄地址
    • AltDeliveryAddress

当我们使用 Visual Studio 将数据库导入 EF(“从数据库更新模型”)时,我们最终会得到如下代码:

我想要的显然是这样的:

我可以在设计器中编辑模型,更改导航属性以给我正确的名称。然而,这不是一个可行的解决方案,因为我们每次对数据库进行更改时都会重建模型。

我尝试过的一个选项是创建一个像这样的部分类(从现有的 MyModel.Designer.cs 复制代码,只是更改了属性名称):

但是,当我运行它时,我收到以下错误:

概念类型“MyModel.Customer”中的成员数量与对象端类型“MyNamespace.DataModel.Customer”中的成员数量不匹配。确保成员数量相同。

我试过使用 [NotMapped()] 属性,但这并没有任何区别。如果我删除 [EdmRelationshipNavigationPropertyAttribute...] 属性,则 Linq 会抱怨以下错误:

LINQ to Entities 不支持指定的类型成员“BillingAddress”。仅支持初始化程序、实体成员和实体导航属性。

有没有其他方法可以在客户对象中实现有意义的名称?

这是我最后想要的:

0 投票
2 回答
10283 浏览

entity-framework - 在 ASP.Net MVC4 应用程序上使用 EF 4.x 生成 .edmx 后清空 .Designer.cs 文件

我已经使用数据库优先方法(使用现有数据库)开始了一个非常简单的 ASP.Net MVC4 应用程序。我.edmx使用 ADO.Net 实体数据模型模板生成。该进程在选项xxxxxxx.Designer.cs下创建了一个文件xxxxxxx.edmx。但是,.cs 文件为空并显示以下消息。

在消息之后,我更改了在xxxxxxx.Designer.cs文件中生成代码的属性。

问题:

  1. 这是正确的做法吗?这个文件的目的是什么?
  2. 我是否还需要通过右键单击“添加代码生成项”然后选择 EF DBContext Generator 从 .edmx 设计器页面生成强类型 DBContext 类?

数据库优先方法的过程到底是什么?

我看过很多帖子/博客/教程,所有似乎都非常令人困惑,主要是针对 CodeFirst 方法。

0 投票
2 回答
5847 浏览

c# - 实体框架可以在没有交集对象的情况下处理多对多关系吗?

使用数据库优先模型:假设我们有经典的表Student, Courseand StudentCourse(后者显然对Studentand有 FK Course)。

如果将此模型导入 EF,您将获得为每个模型生成的对象。Student和类将Course每个都有一个集合StudentCourses,您需要从中跳转另一个关系才能分别到达Courseor Student

我希望以这样一种方式生成代码,即底层交集表是不可见的,即Student有一个集合Courses,并且Course有一个集合Students。我已经在其他 ORM 软件(特别是TopLink)中看到了这一点。可以在EF中完成吗?

0 投票
2 回答
3946 浏览

entity-framework - 实体框架数据库优先 - 复合外键

我有一个包含几个复合外键的数据库。例如,这里是外键的生成脚本:

我正在尝试使用 Entity Framework 5 Database-First 从该数据库生成模型。但是,复合外键的关联并没有与所有表和其他简单外键一起生成。

我怎么能:

  1. 在edmx后面的xml中手动创建这些复合外键(痛苦)
  2. 让实体框架正确生成这些外键,以便我拥有映射

谢谢!

0 投票
3 回答
529 浏览

asp.net-mvc-3 - MVC 3 应用程序与不断变化的数据库的连接

我刚刚开始学习 ASP.NET MVC 3,在决定为我的应用程序连接到数据库的最佳方式时遇到了很大的麻烦。由于我的应用程序数据库将定期增强,因此可以添加/删除新表、列,并且可能还会更改某些列的数据类型。因此,对于这种情况,哪种方法最适合我,以便我的代码易于管理,并且这些更改不会影响我的代码(例如:如果我在 EF 中删除并重新选择表,那么将生成新类并且代码与课程会受到影响)?我读过有代码优先数据库优先实体框架企业库数据访问块SQL 连接调用存储过程等方法但我不确定哪个在这种情况下效果最好,可能是我错过了 ASP.NET MVC 3 连接到数据库的真正风味。

编辑1

我不知道为什么它被要求关闭,但除了这个论坛,我别无选择。我发现了类似的问题,它说明了我的问题Code First vs Data First的部分内容。关于数据库优先方法,答案刚刚在我脑海中造成了混乱。

0 投票
2 回答
6383 浏览

asp.net-mvc-4 - MVC 4 EF5 数据库首先在部分类中设置默认值

我是 MVC 的新手,并试图弄清楚如何为部分类设置默认值。我已经搜索了 2 天,但什么也没有工作。是一个假定的解决方案,但它对我不起作用。我还尝试了 [DefaultValue(10)] 数据注释。

这是从 edmx 文件创建的自动生成的部分类

这是我为添加注释而创建的部分类。

然后在我的控制器中,我实例化了一个新的类实例来初始化它,但是我设置的值没有被设置。

0 投票
1 回答
736 浏览

sql - 加入与 LINQ 的多对多关系

我的任务是将一些旧的 SQL 存储过程转换为 LINQ 以进行我们正在进行的 EF 迁移,我有点难过。鉴于这是从现有应用程序的迁移,edmx 是首先生成数据库的。所以,我有一个我试图复制的 SQL 语句:

特别是我遇到问题的部分是 JOIN ,它是一个关系表,表示和DeliverySubscription_Method_Rel之间的多对多关系。DeliverySubscriptionDeliveryMethod

这显示为:

[DeliverySubscription] * ---- * [Delivery Method]

在 edmx 的数据库图中。没有DeliverySubscription_Method_Rel创建实体。正如您在 SQL 语句中看到的,JOIN 直接在关系表上,但我似乎无法弄清楚如何在 LINQ 中复制它。请帮忙!

更新:所以环顾网络,我发现了一个类似的例子,它建议做这样的事情:

...但是,因为到目前为止我在应用程序中还有很多其他的事情要更改,所以我无法构建以进行测试,所以我只是想运行这个,让大家看看这是否正确。

0 投票
1 回答
2656 浏览

c# - 建模多态关联数据库优先与代码优先

我们有一个数据库,其中一个表包含可以是其他几个表的子记录。它有一个由所有者 ID 和表名组成的“软”外键。这种(反)模式被称为“多态关联”。我们知道这不是最好的数据库设计,我们会在适当的时候改变它,但不会在不久的将来。让我展示一个简化的例子:

在此处输入图像描述

EventPerson和都Product在 Comment 中有记录。如您所见,没有硬性 FK 约束。

Comment在实体框架中,可以通过子类化到等来支持此模型,EventComment并让Event有一个EventComments集合等:

在此处输入图像描述

从数据库生成基本模型后,手动添加子类和关联。OwnerCode是这个TPH模型中的判别器。请注意Event,PersonProduct是完全不同的实体。为它们提供一个通用的基类是没有意义的。

这是数据库优先的。我们现实生活中的模型就是这样工作的,没问题。

好的。现在我们要转向代码优先。所以我开始将数据库逆向工程为代码优先模型(EF Power Tools),然后继续创建子类并映射关联和继承。试图连接到 Linqpad 中的模型。这时候麻烦就开始了。

当尝试使用此模型执行查询时,它会抛出一个InvalidOperationExeception

外键组件“OwnerId”不是“EventComment”类型的声明属性。验证它没有被明确地从模型中排除,并且它是一个有效的原始属性。

当我有双向关联并被OwnerId映射为Comment. EventMap我的类 ( )中的映射EntityTypeConfiguration<Event>如下所示:

所以我试图OwnerId在模型中不映射关联:

这抛出一个MetaDataException

指定的架构无效。错误:(10,6):错误 0019:类型中的每个属性名称必须是唯一的。已定义属性名称“OwnerId”。(11,6) : 错误 0019: 类型中的每个属性名称必须是唯一的。已定义属性名称“OwnerId”。

如果我删除了三个实体评论关联中的两个,就可以了,但这当然不是治愈方法。

一些进一步的细节:

  • 通过添加 DbContext 生成器项,可以从 edmx 创建一个有效的 DbContext 模型(“第二个代码”)。(这暂时是一种解决方法)。
  • 当我将工作代码优先模型(具有一个关联)导出到 edmx ( EdmxWriter) 时,关联似乎在存储模型中,而在原始 edmx 中它们是概念模型的一部分。

那么,我怎样才能先创建这个模型呢?我认为关键是如何指示代码优先映射概念模型中的关联,而不是存储模型。