【问题标题】:Correct way/sequence to create DbContext创建 DbContext 的正确方式/顺序
【发布时间】:2016-07-08 19:06:34
【问题描述】:

为我的数据库生成 DbContext 的正确方法是什么。 (我首先使用数据库。)

如果我不先创建 ADO.NET 实体数据模型(EDMX 文件),EF 6.x DbContext Generator 选项似乎会生成空文件。

但是,如果我先创建 EDMX 文件,然后再创建 DbContext,我似乎会得到相互冲突的符号,并出现以下错误:

以下方法或属性之间的调用不明确:“BillsEntities.BillsEntities()”和“BillsEntities.BillsEntities()”

d:\users\jonathan\documents\visual studio 2015\Projects\BillTracking\BillsDomain\BillsModel.Context.cs(23,33,23,48):错误 CS0111:类型“实体”已经定义了一个名为“ OnModelCreating' 具有相同的参数类型

d:\users\jonathan\documents\visual studio 2015\Projects\BillTracking\BillsDomain\BillsModel.Context.cs(28,36,28,41):错误 CS0102:“实体”类型已包含'账单'

d:\users\jonathan\documents\visual studio 2015\Projects\BillTracking\BillsDomain\BillsModel.Context.cs(29,39,29,47):错误 CS0102:“实体”类型已包含“付款”

d:\users\jonathan\documents\visual studio 2015\Projects\BillTracking\BillsDomain\BillsModel.Context.cs(30,39,30,48):错误 CS0102:“实体”类型已包含“实用程序”

如果这还不够,我注意到每次我生成一个新的 EDMX 文件时,它似乎都想在我的配置文件中创建一个新的连接字符串,并且似乎没有给我一个使用现有连接字符串的选项。

谁能给我指出一个资源,该资源提供了以正确方式和正确顺序执行这些任务的示例?当我在谷歌上搜索时,我得到的大多是代码优先的文章,根本没有解决这个问题。

【问题讨论】:

  • 您是否配置 EDMX 以生成与包含 EDMX 的项目不同的项目实体?如果是这样,这可能是重复类的原因。该生成将第一次在包含 EDMX 的项目和您的其他目标项目中创建类。然后,您可以删除 .edmx 文件下的 .tt 文件(在解决方案资源管理器中),它们不会在后续代码生成中重新生成。
  • @user469104:不,我创建了一个单独的域项目,我的所有数据库模型、EDMX 和实体都进入了该域项目。

标签: c# .net linq entity-framework-6 dbcontext


【解决方案1】:

为我的数据库生成 DbContext 的正确方法是什么。 (我先使用数据库。)

如果您首先使用数据库,则需要和 ADO.NET 实体数据模型。

如果我不先创建 ADO.NET 实体数据模型(EDMX 文件),EF 6.x DbContext Generator 选项会生成空文件。

如果您首先使用数据库,则不应运行以下任何命令:Enable-Migrations、Add-Migration、Update-Database。第一步是创建 EDMX 文件。

但是,如果我先创建 EDMX 文件,然后再创建 DbContext,我似乎会得到相互冲突的符号,并出现以下错误:

一旦您创建了 EDMX 文件,您的 DbContext 也将在该文件中创建。你可以通过扩展你的 edmx 文件和你的 .Context.tt 来访问这个文件,然后打开你的 .Context.cs 类。请注意此类的构造函数如何包含一个 :base("name=yourdbEntities"),它可以在您的 web.config 文件中找到。

如果这还不够,我注意到每次我生成一个新的 EDMX 文件时,它似乎都想在我的配置文件中创建一个新的连接字符串,并且似乎没有给我一个使用现有连接字符串的选项。

注释掉你的连接字符串,并在你创建你的 edmx 文件时让它创建一个新的。如果一切正常,您可以返回并删除它。

这里有一些资源可能会对您有所帮助:

http://www.tutorialspoint.com/entity_framework/entity_database_first_approach.htm https://www.youtube.com/watch?v=o-cV_fSNMqw

希望这个答案对您有所帮助。

【讨论】:

  • 是的,看起来确实已经创建了 DbContext 类,而无需运行任何其他命令。也许这在过去几年发生了变化。进一步测试。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-31
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多