问题标签 [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 投票
3 回答
123 浏览

c# - 在 MVC3 项目中更改数据库有多容易?

基本上,我制作了一个 MVC3 应用程序,它连接并更新服务器上存在的数据库。然而,这个数据库是一个测试数据库,当我实时推出项目时,我需要它来连接到实际的数据库。我的问题是更改项目/应用程序以指向这个新数据库有多难?

我使用了数据库优先方法,并且知道我需要更改我的连接字符串。我觉得不可能这么简单。

任何帮助、提示或教程将不胜感激。

0 投票
3 回答
5549 浏览

c# - 即使找到键,实体框架也会为导航属性插入行

我正在使用实体框架。我有一个表 Person,它在表 PersonCategory 上有一个外键。Person Id 是一个自动递增的身份 (1,1)。每次我更新人员实体时,实体框架都会为 PersonCategory 表插入一行,即使找到了类别。

我正在使用数据库优先设计。

0 投票
2 回答
686 浏览

c# - 编辑 MVC3 自动生成代码的最佳实践?

对不起,如果这是在错误的地方,但我认为它是。

所以我在创建 MVC3 互联网应用程序时使用了数据库优先方法,并为我生成了我的类。我是 MVC3 的新手,对 c# 和 Visual Studio 也很陌生,尽管我确实有一点经验。

自动生成的代码警告编辑可能会导致意外结果,如果重新生成代码,更改将被删除。据我了解,这意味着更改数据库、重新运行 tt 文件或更新模型。

但是,编辑它是否可行,并且只跟踪更改以防我需要重新生成,还是有更好的方法来解决它?

谢谢你的帮助。

0 投票
1 回答
5752 浏览

c# - 在 Database First 中更改实体和属性名称

我正在启动一个新应用程序,该应用程序必须使用现有数据库,该数据库使用一些在 .net 中非常烦人的命名约定(表名以指定表的业务域的几个三元组开头,列名以表三元组开头,三元组大写,并用下划线等分隔,)。

我想做的是编写一个简单的重命名规则(这就像找到最后一个下划线并在之后的所有内容一样简单)并将其应用到实体框架中。我真的不想在编辑器中一一编辑名称,特别是因为数据库可能会更改,我不想多次这样做。

我正在使用 Database First(因为数据库已经存在并且它是“主数据库”)和 EF 4.x DbContext Generator,它开箱即用的效果非常好(尽管类和属性命名错误)。

我编辑了 T4 模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext 对象找不到与我尝试请求的实体匹配的表,并且出现此异常:

实体类型 [Entity Name] 不是当前上下文模型的一部分。

这很明显为什么它找不到表:当我动态更改它时,没有任何东西告诉它如何匹配实体名称和表。我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这在 Database First 中没有使用(并且默认的 T4 模板在其中添加了一个异常,以防万一)。

所以现在我被卡住了,我不知道如何指定匹配。

以下是我的几个想法,但不确定它是否正确或可行:

  • 使用“复数/单数”API 更改实体名称?听起来像一个肮脏的解决方法。但它可能有效(虽然没有尝试)。
  • 寻找一种即时编辑 EDMX 文件的方法。
  • 之后编辑 EDMX,但它可能会使过程复杂化(在设计器中编辑,然后执行一个工具来改变 EDMX,然后运行自定义工具来重新生成实体和 DbContext ......而今天我只需要在设计器中进行编辑)。
  • 使用 Code First(因为通过 DbContext 类中的属性或指令使用不同的实体名称似乎比表名称更容易),但听起来与现有数据库一起使用它不会更复杂。

任何想法 ?还是我错过了什么?

0 投票
1 回答
273 浏览

sql - 使用实体框架的多对多表的 MVC 3 模型

我想简单地选择数据库中的版本和模板组合。

这是数据库结构:

以下是用于 productversion 和 CodeTemplates 的当前模型:

这是我尝试使用的:

弹出的第一个错误是:

在模型生成期间检测到一个或多个验证错误:

System.Data.Edm.EdmEntityType: : EntityType 'ProductVersionWithTemplateModel' 没有定义键。定义此 EntityType 的键。System.Data.Edm.EdmEntitySet: EntityType: EntitySet “AppliedTemplates” 基于没有定义键的类型“ProductVersionWithTemplateModel”。

我在这里缺少什么,一个 dbmodelbuilder 绑定?

回答(因为评论中的格式很糟糕):

0 投票
3 回答
6110 浏览

c# - 实体框架生成 short 而不是 int

我们将 Entity Framework 数据库优先用于我们的 Oracle 数据库。

由于某种原因Number(5)变成Int16-short

最大值Number(5)99999
最大值Int1632767

问题......有没有办法指示映射器翻译Number(5)int32

0 投票
3 回答
4166 浏览

entity-framework - EntityFramework 5 - 获取值不能为空参数名称:使用设计器时出现字体错误

在设计器上使用 Database First 方法使用 EF 5 时,我遇到了一个奇怪的错误。错误是说“值不能为空参数名称:字体”。我还在设计区域上得到一个大的红色 X。我不确定设计器是如何产生这个错误的,到目前为止,我只使用设计器来创建我的 edmx。

想法?这是 VS 2012 RTM 版本。

0 投票
0 回答
358 浏览

c#-4.0 - 无法从数据库中删除实体(实体框架 4.1)

我一直在拼命地尝试从数据库中删除一个项目,但到目前为止还无法让它工作。我看到的错误信息是这样的:

我使用的是 EF4.1,带有 EDMX(数据库优先)和 POCO 对象。我为每种类型都有一个存储库和一个实现基本方法的通用存储库。

具体问题是当我想删除一个项目时。删除孩子不是问题 - 一切正常 - 问题是当我开始删除实体本身时。

考虑以下模型。我有一个实体“Foo”,它与“Bar”有一对多的关系。我在我的存储库中调用以下方法:

GenericRepository“删除”方法是:

GenericRepository“保存”方法很简单:

我想上班是这样的:

但不幸的是(目前)我删除该项目的唯一方法是运行一些只调用_entities.Database.ExecuteSqlCommand(SQL) 的SQL。

我已经阅读了很多东西,但似乎没有任何效果。在尝试了解正在发生的事情时,我真的很感激一些帮助。

谢谢,

何塞

0 投票
2 回答
73 浏览

asp.net - 为什么我的查询不能正常工作?

嗨,我使用此查询更新我的数据库,但无法正常工作:

0 投票
3 回答
15756 浏览

entity-framework - 实体框架 - 实体只读属性映射到相关表的列

我有一个有趣的问题要解决,但虽然很常见,但它看起来并不容易通过 Entity Framework 实现。有两个表:

玩家只能属于一支球队。使用 TPT(DB first),我们有两个类映射到这些表:

我想要实现的是 Player 实体上的属性 IsProfessional:

是否可以在 linq 查询中使用 IsProfessional 属性来配置映射?

并在每次实现 Player 实体时填充该字段?

已经尝试过:

  • 实体拆分。不可能,因为我想保留团队映射并且因为关系不是 1:1)
  • 将播放器实体映射到数据库视图。不喜欢它,因为玩家实体还有我需要的其他关系。我知道可以手动创建它们,但是从数据库更新 edmx 会重置 ssdl。

谢谢

解决方案

基于 Gert Arnold 回答中的第二个选项,适合我需要的解决方案如下:

  1. 我创建函数GetIsProfessional(必须这样做,因为计算字段通常只能从自己的表字段中创建)

    /li>
  2. Player我在表上创建了计算字段

    /li>
  3. 当我使用 db first 方法时,我只是从数据库中更新模型,仅此而已,我可以在该字段上进行查询,并在 Player 对象物化时预先填充它。