标签: database-first

数据库第一个实体框架将唯一外键映射为一对多

我在Microsoft SQL Server 2008 R2中有一个表,调用Page了一个名为的主键ID.我有另一个Navigation用列调用的表PageID.PageID是对一种独特的外键引用ID的列Page.这会在记录NavigationPage记录之间创建一对一的关系.

从数据库生成模型时,它会创建一对多关系,其中a Page包含Navigation记录列表.

这只是实体框架检测到涉及外键并忽略数据库中列的唯一性吗?

PageID列的SQL Navigation是:

[PageID] INTEGER FOREIGN KEY REFERENCES [Page](ID) UNIQUE NOT NULL
Run Code Online (Sandbox Code Playgroud)

ID列的SQL Page是:

[ID] INTEGER PRIMARY KEY IDENTITY(0, 1) NOT NULL
Run Code Online (Sandbox Code Playgroud)

这是我原来的解决方案,这是Ladislav提到的.

PageID列的SQL Navigation是:

[ID] INTEGER PRIMARY KEY FOREIGN KEY REFERENCES [Page](ID) NOT NULL
Run Code Online (Sandbox Code Playgroud)

.net c# sql entity-framework database-first

5
推荐指数
1
解决办法
4044
查看次数

添加功能导入不适用于功能

我在我的数据库中添加了一个函数,我希望它在我的代码中可以调用.对于存储过程,我右键单击SP并在模型浏览器中选择添加功能导入来实现此目的,但此选项不适用于我的功能.我该怎么做才能导入这个功能?

stored-procedures user-defined-functions entity-framework-4 database-first

5
推荐指数
1
解决办法
4147
查看次数

EF DB-first映射混乱

由于EF的这个小怪癖,我有一个令人沮丧的情况.这是一个简单的行为演示.首先是数据库架构:

在此输入图像描述

如您所见,RestrictedProduct是产品的一个特例,我打算Product用一些特殊的代码创建一个子类.

现在我导入到EF数据模型:

在此输入图像描述

哎呀!EF看到RestrictedProduct只有2个字段,都是FK,所以它将它映射为Product和之间的一对多关系Restriction.所以我回到数据库并添加一个Dummy字段RestrictedProduct,现在我的EF模型看起来好多了:

在此输入图像描述

但那个Dummy领域是愚蠢而毫无意义的.也许我可以删除它?我从数据库表和实体模型中删除了该字段,然后从数据库刷新模型...

在此输入图像描述

不好了!该Product-Restriction协会以新名称(RestrictedProduct1)返回!另外,它不会编译:

错误3034:从行(x,y)开始映射片段时出现问题:具有可能不同键的两个实体映射到同一行.确保这两个映射片段将AssociationSet的两端映射到相应的列.

有没有办法防止这种行为,没有将Dummy字段保留在RestrictedProduct桌面上?

c# entity-framework database-first entity-framework-5

5
推荐指数
1
解决办法
508
查看次数

实体框架DB首先:将关联表转换为导航属性

我正在使用Entity Framework Database First,但我想从Code First范例中复制以下行为:

在实体框架代码中,您可以按照以下方式执行操作:

public class Thing
{
    public int ID { get; set; }
    ICollection<Stuff> Stuffs { get; set; }
}

public class Stuff
{
    public int ID { get; set; }
    ICollection<Thing> Things { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并且数据库将生成和Associative表来表示多对多的关系.

我正在使用Database First和遗留数据库.我引入了实体,它包含了表示两个表之间多对多关系的关联表.

由于关联表作为实体包含在内,因此导航属性如下:

public class Thing
{
    public int ID { get; set; }
    public ICollection<ThingStuff> ThingStuffs { get; set; }
}

public class ThingStuff
{
    public int ThingID { get; set; }
    public int StuffID { …
Run Code Online (Sandbox Code Playgroud)

entity-framework database-first ef-database-first .net-4.5 entity-framework-5

5
推荐指数
1
解决办法
1513
查看次数

映射片段实体框架错误

我正在开发一个 ASP.NET MVC4 应用程序(数据库优先方法),现在我从数据库更新了模型,然后我收到了这个错误:

从第 1106 行开始映射片段的问题:表 Trn_BenchProficiency 的键 (Trn_BenchProficiency.BenchNumber) 的潜在运行时冲突:列 (Trn_BenchProficiency.BenchNumber) 被映射到 EntitySet Trn_BenchProficiency 的属性 (Trn_BenchProficiency),但它们不构成 BenchProficiency 的概念侧实体集。关键属性(Trn_BenchProficiency.AssessedDate、Trn_BenchProficiency.BenchNumber、Trn_BenchProficiency.Proficiency、Trn_BenchProficiency.SkillAllignmentID、Trn_BenchProficiency.SkillID)。

当我双击错误visual studio时显示:

在此处输入图片说明

请帮助我,这是什么问题?我真的找不到错误。

asp.net-mvc entity-framework database-first ef-database-first asp.net-mvc-4

5
推荐指数
1
解决办法
6080
查看次数

实体框架,数据库优先,未创建类文件

我有一个从 MS SQL 数据库创建的非常复杂的 EF 模型。(我使用的是 EF 6.1.0。)我向数据库添加了一个表并执行了“从数据库更新模型”。不幸的是,出了点问题,虽然在 .edmx 文件(如 XML 编辑器中看到的)中为表及其关系(所有正确和完整,据我所知)生成了大量 XML,但没有生成类声明. 当我在 .tt 下查看模型中所有表的 .cs 文件所在的位置时,该类没有 .cs 文件。由于该类已经在 .edmx 文件中,我无法重复“从数据库更新模型”。

过去我以这种方式在模型中添加了许多表,我看不出这个表有什么不同。

以下是我尝试过的一些事情:

  • 搜索了网络,但没有找到似乎相关的内容。大多数文章都是关于使用“从数据库更新模型”的教程。这是一个示例:在 EF Database First 项目中更新模型
  • 使用 XML 编辑器从 .edms 文件中删除对表、其关联和实体集的所有引用。然后我关闭 VS,重新启动,重新打开它,并重复“从数据库更新模型”。我得到了同样的结果。
  • 在模型浏览器中查看是否可以删除该类,但它不存在。
  • 关闭了我所有的 VS 窗口。(一篇文章提出了这一点。)

有人有建议吗?先感谢您。

c# sql-server visual-studio database-first entity-framework-6

5
推荐指数
0
解决办法
1487
查看次数

分离实体框架poco和objectcontext

到目前为止,我正在创建一个classLibrary项目,并从exixting数据库中插入新的Ado.net Entity数据模型和genareting.类和对象类代码自动创建.这对我来说并不重要.

但我想这样做并将ObjectContext类(例如:SomeEntities)和table classess分离为两个calss库.

当我更改数据库表属性时,我将更新edmx模型,类将自动更新.

有没有办法做到这一点?我没有使用codefirst因为有一个数据库和数据,我不是同样使用modelfirst,我使用databasefirst但不能分开

entity-framework entity-framework-4 database-first

4
推荐指数
1
解决办法
7556
查看次数

为什么Database First EF会跳过某些表的映射?

我正在使用Entity Framework 4和Database First绑定,而EF并没有为我的一些表生成实体.我没有收到任何错误,无论我从设计图面上的"从数据库更新模型"弹出菜单中选择要生成的表多少次,模型中仍然缺少相同的表.

我在向导中没有错误.他们只是没有生成.有线索吗?

entity-framework-4 database-first ef-database-first

4
推荐指数
1
解决办法
3826
查看次数

实体框架数据库首次重新生成让我失去手动更改

我正在建立一个MVC .NET网站.

由于我是一名学习首先设计数据库的老派程序员,因此我选择了数据库第一种方法.我也在使用"代码生成"来创建扩展名的文件.tt.到目前为止,一切都在发挥作用,除了一件令我烦恼的事情.

经典场景:

  • 我意识到我错过了一个领域
  • 我在数据库中添加了该字段.
  • 我进入edmx并选择从数据库更新模型.

然后我回到我的代码和那些用于工作的东西,就像我放在模型字段顶部的特殊DisplayName标签一样被删除了.

例如,如果我有这个:

public partial class Blog
    {
        public Blog()
        {
            this.BlogComments = new HashSet<BlogComment>();
        }

        public int IDBlog { get; set; }
        public string Title { get; set; }

        [AllowHtml]
        public string Content { get; set; }
        public System.DateTime DateCreated { get; set; }
        public string Author { get; set; }

        public virtual ICollection<BlogComment> BlogComments { get; set; }
    }
Run Code Online (Sandbox Code Playgroud)

它会变成

public partial class Blog
    {
        public Blog()
        {
            this.BlogComments = …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework-4 asp.net-mvc-3 database-first

3
推荐指数
1
解决办法
3149
查看次数

EntityFramework Core 数据库首先,Scaffold-DbContext 无法找到接受参数 '--use-database-names' 错误的位置参数

我正在尝试使用 EntityFramework Core(数据库优先方法)从现有数据库创建模型。模型已创建,但表名和列名更改为 C# 风格。因为我希望模型仍然使用数据库中的精确表名和列名,所以根据Entity Framework Core 工具参考,我在命令行中附加了“--use-database-names”

以下是在包管理器控制台中执行的命令:

Scaffold-DbContext "Server=aServer;Database=someDb;Trusted_Connection=True" Microsoft.EntityFrameworkCore.SqlServer -o Models --use-database-names
Run Code Online (Sandbox Code Playgroud)

但我收到以下错误:

Scaffold-DbContext:找不到接受参数“--use-database-names”的位置参数。行:1 字符:1

  • Scaffold-DbContext“服务器=aServer;数据库=someDb;Trusted_Conn ...
  • ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~
    • CategoryInfo:InvalidArgument:(:) [Scaffold-DbContext],ParameterBindingException
    • FullQualifiedErrorId:PositionalParameterNotFound,Scaffold-DbContext

有人遇到过这个问题吗?我错过了什么?提前致谢!

以下是简单项目的一些基本信息。

集成开发环境:Visual Studio 2017

目标框架:.NET Core 2.1

安装的 NuGet 包:

Microsoft.EntityFrameworkCore.Design(2.2.0)
Microsoft.EntityFrameworkCore.SqlServer(2.2.0)
Microsoft.EntityFrameworkCore.Tools(2.2.0)
Microsoft.EntityFrameworkCore.SqlServer.Design(1.1.6)
Run Code Online (Sandbox Code Playgroud)

scaffold database-first entity-framework-core .net-core

3
推荐指数
1
解决办法
1万
查看次数

如何让MVC-mini-profiler在EF 4.1 Database First上运行

为此,花费更多的时间来梳理SO.这是设置

  • MVC 3 App使用Repository模式,在2个数据库中有3个存储库.
  • EF 4.1数据库首先使用DBContext API进行数据库连接.
  • 安装来自nuget的mvc-mini-profiler

这就是我在存储库中创建Db Context的方式

public class TransactionRepository : BaseRepository, ITransactionRepository
{
    AccountingEntities _db = new AccountingEntities();

    // repository methods
}
Run Code Online (Sandbox Code Playgroud)

然后在控制器中

public class InvoiceController : BaseController
{
    private ITransactionRepository _txnRepository;

    public InvoiceController()
    {
        _txnRepository = new TransactionRepository();
    }

    public InvoiceController(ITransactionRepository t)
    {
        _txnRepository = t;
    }
}
Run Code Online (Sandbox Code Playgroud)

最后,我已添加到web.config

  <system.data>
    <DbProviderFactories>
      <remove invariant="MvcMiniProfiler.Data.ProfiledDbProvider" />
      <add name="MvcMiniProfiler.Data.ProfiledDbProvider" invariant="MvcMiniProfiler.Data.ProfiledDbProvider" description="MvcMiniProfiler.Data.ProfiledDbProvider" type="MvcMiniProfiler.Data.ProfiledDbProviderFactory, MvcMiniProfiler, Version=1.8.0.0, Culture=neutral, PublicKeyToken=b44f9351044011a3" />
    </DbProviderFactories>
  </system.data>
Run Code Online (Sandbox Code Playgroud)

分析这些连接的后续步骤是什么?慢慢来,因为这是我第一次接触实体框架,所以假设EF连接/上下文细节很少.

entity-framework-4.1 database-first ef-database-first mvc-mini-profiler

2
推荐指数
1
解决办法
1219
查看次数

实体框架DbContext没有看到app.config/web.config中的连接字符串

所以,我已经按照ADO.NET团队博客的指示尝试制作一个小型测试项目.我仔细检查了一切.它似乎不起作用,并一直说连接字符串丢失.

http://blogs.msdn.com/b/adonet/archive/2011/03/15/ef-4-1-model-amp-database-first-walkthrough.aspx

步.1构建此UserModels.dll.在dll,App.Config文件中,edmx生成了这个连接字符串:(在创建它时点击'test'按钮,它成功连接,并从'UserDatabase'生成所有表的edmx图)

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <connectionStrings>
    <add name="UserModelsContainer" connectionString="metadata=res://*/UserModels.csdl|res://*/UserModels.ssdl|res://*/UserModels.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=MyDesktop\SQL2008;initial catalog=UserDatabase;integrated security=True;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
</configuration>
Run Code Online (Sandbox Code Playgroud)

第2步然后我做了一个测试项目:

class UnitTetst1 ....
TestMethod1()....
using (var db = new UserModelsContainer()) {
  int i = db.Users.Count(); // <---expecting '0' for a new db, but I get an exception
}
Run Code Online (Sandbox Code Playgroud)

---------问题在这里-----------------

步骤3.运行测试.然后我得到一个错误InvalidOperationException像这样:

"No connection string named 'UserModelsContainer' could be found in the application config file."
Run Code Online (Sandbox Code Playgroud)

好像DbContext不知道在哪里从App.Config中取出connectionStrings?

请帮帮忙~~

entity-framework ef-code-first database-first dbcontext

2
推荐指数
2
解决办法
9943
查看次数

EF:选择子类的所有实体(继承)

我正在使用数据库第一种方法和DbContext.我的数据模型中有几个继承结构(TPH).但是DbContext只为基类创建一个DbSet,而为子类创建没有.我应该如何检索指定子类的所有实体?

我无法根据映射标准编写查询,因为我必须从数据模型中删除这些字段.

我可以简单地将新的DbSet添加到Entities类(部分类)吗?

inheritance entity-framework-4 table-per-hierarchy database-first dbcontext

1
推荐指数
1
解决办法
1271
查看次数