问题标签 [ef-model-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.
.net - 如何从“模型优先”模型创建数据库?
我一直在尝试遵循一些关于如何在 MVC 中使用模型优先方法创建数据库的教程。我已经在设计器中创建实体并尝试从模型生成数据库。它可以很好地创建 SQL 文件,但我似乎无法执行它?我没有办法这样做吗?当我右键单击文件时,执行选项不可用,当我打开文件并在上下文中右键单击时,该选项不可用。我尝试连接到空白数据库,然后使用模型实体在此数据库上创建实体模型,然后尝试从模型生成数据库,但仍然无法从 VS2010 express 中执行 sql。有没有它不存在的原因?
谢谢
.net - EF 模型优先还是代码优先方法?
我知道这个问题已经被问过很多次了,因为我已经阅读了很多关于利弊等主题的帖子,但我仍然无法决定哪种方法适合我。我对网络编程非常陌生,并且来自 SQL DB 管理员/报告写作背景。我决定尝试建立自己的网站,将来可能会有 30 -40 张桌子。
我已经研究过这两种方法,并且我确实喜欢实体模型方法,只是因为我喜欢设计器的简单性,而且我喜欢在我面前看到整个模型,它在一张快照中显示了整体画面。此外,我不是一个强大的程序员,我对它使用 DbContext 生成器模板生成 POCO 并在类之间进行所有链接的方式印象深刻。
然而,虽然我喜欢模型优先方法,但我觉得有一些缺点,我不确定它们是否是实际的缺点,或者我只是对模型优先方法和代码优先方法不够了解,因为我仍然非常对此很陌生。
我对使用 Model First 方法犹豫不决的原因是:
- 主要是因为我很难找到关于使用 MVC 3 的模型优先方法的教程。我发现使用 DbContext 的最佳教程是 Julie Lerman 的,但她没有涵盖对于使用数据注释和制作其他重要的伙伴类重新生成 POCO 时不会丢失的更改。大多数与 MVC 3 相关的教程似乎都使用代码优先方法。大多数人说这是因为导师不想专注于EF,而是在tuts中展示更多的MVC。我个人认为这是因为微软支持 Code First 方法而不是其他方法 :)
- 如果创建伙伴类是一种很好的做法,为什么我找不到很多针对 MVC 3 的教程?Buddy Classes 是视图模型的另一个名称吗?为什么我找不到 Microsoft 提供的任何教程来展示这些与 MVC 3 一起使用的伙伴/视图模型?
- 我试图在 2 个表之间建立基本的 1 对 1 关系。在模型中,您必须将每个表的标识键设置为相同的字段,而不是在其中一个表中使用 FK,当您有 3 个或更多表通过 1 对 1 关系相互链接时,这可能会有点混乱. 在代码中,解决此问题的一种方法是使用模型构建器并手动设置它。我认为在 MF 中,您可以通过进入我根本不喜欢做的 XML 来改变关系。
- 更多关于代码优先问题的支持/帮助
我对使用 Code First 方法犹豫不决的原因是:
-我是新手编码员。
-我发现随着项目的扩展,跟踪表格和关系变得非常困难。
- 没有模型图,我不得不说我真的很喜欢这个想法。
-通过配置类将实体映射到数据库我觉得不可能:)。
-更新表将需要更改代码和数据库。在模型中,只有一个模型更改会自动更新数据库和代码,如果你使用伙伴类,你可能也必须更新这些。
此外,现在我看到人们在某种程度上结合了 Code First 和 Database first 方法,因为您不让 Code First 生成数据库,而是手动创建数据库并使用 Code First API 到 EF 来获取它。
我的头脑在思考所有的选择、缺点和利弊。我只想继续创建我的网站,而不是考虑采用哪种方法。任何人都可以根据我所说的和/或他们认为将来会成为主流的方法,给我一些关于他们认为最好的方法的见解吗?
非常感谢戴夫
.net - 具有 DbContext 的模型优先,无法初始化新数据库
我放弃。我发现了这个:http: //blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx 并认为,这很酷。所以我很快重新设计了我的模型,以充分利用两个世界。
但是现在我的模型无法创建新数据库(或将表添加到现有数据库)。我收到此错误:
如果在 Code First 模式下使用,使用用于 Database First 和 Model First 开发的 T4 模板生成的代码可能无法正常工作。要继续使用 Database First 或 Model First,请确保在执行应用程序的配置文件中指定了实体框架连接字符串。要使用从 Database First 或 Model First 生成的这些类,使用 Code First 添加使用属性或 DbModelBuilder API 的任何其他配置,然后删除引发此异常的代码。
在:
这就是我的连接字符串:
笔记。后来我添加了初始目录,以尝试它是否可以工作,但它完全一样。
.net - 使用 Model First 方法时如何播种数据?
所以我正在学习 MVC3 和 EF4。我尝试了代码优先方法,但它对我来说太混乱了。我可以毫无问题地创建类,但是当处理外键和彼此之间的关系时,困难的部分就来了。
但我先选择了模型。通过这种方式,我可以直观地设计它并查看关系在哪里。
创建模型后,它会为我创建一个 SQL,我会针对我的 SQL Express 数据库执行该 SQL。完成了,完成了。
现在我想要我的表中的数据。当然,我可以使用服务器资源管理器添加它们,但我很可能会在进行过程中对我的模型进行更改。并不断更新数据库。所以我不能一直手动输入数据。我知道如果您首先使用代码,您可以派生DropCreateDatabaseIfModelChanges
并覆盖该seed
方法。
但是,如何使用模型优先方法来做到这一点?我有以下代码:
当然,在我的全局文件中:
那么现在怎么办?我如何告诉它运行该方法?我究竟做错了什么?
.net - 从 .edmx 文件生成 SQL 模式时,是否可以为属性生成不同的列名?
我“继承”了一个 EF 4.0.edmx
文件。当前,给定的属性名称和列名称在生成的 C# 和 SQL 架构中是相同的。我已经升级到 EF 4.1,并将代码生成项更改为生成 aDbContext
而不是ObjectContext
.
我想要做的是生成列名可能不同的 SQL 模式。例如,假设我有一个Id
属性/列Product
; 我想Id
为类(通过 T4 模板生成)和ProductId
列(不知何故通过从模型生成数据库...从图中的上下文菜单条目)生成,然后使用基于代码的流式配置功能来映射两个通过EntityTypeConfiguration<T>.HasColumnName()
。
我可以这样做还是有合理的选择?我意识到我可以使用 4.1 在代码中完成这一切,但想知道这种“过渡”方法是否可行。
entity-framework - EF 4.1 模型中的图像数据类型优先
我们有一个使用实体框架 4.0 的项目。我们绘制模型,然后生成 SQL Compact 3.5 DB。
由于我们需要一个大型 BLOB 存储,我们创建了一个具有Image数据类型的列(因为Binary限制为 8000 字节)。但是,当更新到 EF 4.1 时,我们的模型被静默转换为具有二进制列!
不用担心,我们想,我们只要把它改回来。问题是不能再选择图像了!并且 - 指定二进制并将长度设置为一个较大的值,比如 100000,在尝试生成数据库时会出错。
我们从EF 4.1 Release Notes、相关的 ADO.net 团队博客文章、描述相关问题的第三篇文章和讨论相关问题的 SO questing中找到了一些使用代码优先方法的指针。但是,所有这些都使用Code First方法谈论这个问题。
关于解决它的任何指针Model First?
谢谢!
.net - 具有存储过程的 EF 模型优先
我正在使用 EF 4 和模型优先...我从模型生成数据库。在那种情况下,我如何能够使用存储过程?它们也应该与数据库一起自动生成..?
c# - EF 从模型生成数据库删除函数导入
好的,我已经看到了这个问题Entity Framework: Generate Database From Models removes Stored Procedures from Model Store但我认为这还没有解决。我有一些功能需要在 SQL Server 上运行以进行筛选。我无法在 .NET 中编写该代码,所以我只是在 SQL Server 中将该函数编写为函数。我使用的是模型优先,但我需要在 SQL 级别使用该函数,并且我使用数据库选项中的更新模型来导入该函数。但是当我在实体设计器中进行更改并从模型生成数据库时,函数映射被删除。我知道我不应该同时使用模型优先和数据库优先,但是我该如何解决我的问题呢?我有这段无法用 C# 编写的代码,我在 LINQ 查询中需要它。当我创建导入并创建具有 EdmFunction 属性的 C# 方法时,它确实有效,该属性映射到数据库中的函数,但是我怎样才能让它持久化,以便在更新时保留我的模型和我的 SQL 函数之间的链接?编写可以在 LINQ-to-Entities 中翻译的函数是唯一的选择吗?
这是我的 SQL 函数
(我不是 SQL 专家,这可能不是最好的方法,所以如果有更好的方法,请纠正我)
我需要它在数据库中运行,而无需从数据库中将任何内容导入 ASP.NET。如果您有办法将此代码转换为 C# 并在 LINQ-to-Entities 中转换为 SQL 代码,那么也欢迎。
.net - 通过 EF4.1 NavigationProperty 添加时,十进制类型丢失所有精度,可能的框架错误?
我创建了一个示例项目,您可以在此处下载。
手动重新创建的步骤:
- 创建新的 MVC3 Web 项目。
- 添加 .edmx
- 创建一个名为“帐户”的实体。
- 创建一个名为“AccountLineItem”的实体。
- 将 Decimal 字段添加到“AccountLineItem”。
- 在“Account”和“AccountLineItem”之间创建一对多关联,确保选中在“Account”上创建导航属性的选项。
添加代码以在任何地方更新数据库,我在 HomeController 上使用了 Index():
/li>
如您所见,我正在使用一个 Account 和一个值为 22.10 的 AccountLineItem 更新数据库;但是,运行此代码后,SQLEXPRESS 中出现的值 22 没有精度。
我使用 SQL 2008 R2 框发现了这种行为,所以我不认为问题出在 Express 上。
其他人可以复制这种行为吗?我在做一些公然错误的事情吗?欢迎所有反馈。
c# - 从数据库更新模型后,Entity Framework 4.0 Model First 继承丢失
在我的应用程序中,我使用的是 Entity Framework 4.0 Model First。我有几个实现继承的表,例如Product
作为基表并SpecificProduct
从 Product 继承。
继承在 edmx 文件中可见。最初设置数据库时,我右键单击设计器并选择“从模型生成数据库”,这会生成一个 SQL 创建脚本。
假设我在 SQL 数据库中对SpecificProduct
表进行了一些更改,并且想要升级模型。显然我会SpecificProduct
从我的 edmx 文件中删除表,然后右键单击 edmx 设计器并选择“从数据库更新模型”。
这导致之间的继承Product
和SpecificProduct
丢失。而不是继承,我确实有一个 1 到 0..1 的关系,主键Product
现在也是SpecificProduct
.
这实际上不是我想要的样子,因为我的项目将不再构建,因为我的代码依赖于可用的继承。
我可以在设计器文件中手动修复此问题,方法是将插入的主键列删除到SpecificProduct
中,删除新的 1 到 0..1 关系,然后再次在 edmx 设计器中插入继承。
没有办法自动执行此操作吗?
或者这仅仅是模型优先尝试的一个限制,我不知道(如果这真的是一个限制,也不会再选择)?