标签: ef-database-first

实体框架DB-First,实现继承

我正在尝试使用实体框架6.0和数据库第一种方法实现继承.好吧,假设我有一个像下面这样PersonOrganization实体:

// a simplified version of organization entity
public class Organization
{
    public Guid ID { get; set; }
    public string Nickname { get; set; }
    public string Email { get; set; }
    public string PhoneNumber { get; set; }
    public string OfficialName { get; set; }
    public Guid CEOID { get; set; }
    public DateTime? RegisterDate { get; set; }
}

// a simplified version of person entity
public class Person
{
    public Guid ID …
Run Code Online (Sandbox Code Playgroud)

c# inheritance entity-framework ef-database-first

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

将新列添加到实体框架中的现有表

我在数据库中的表中添加了一个新列.该表已在现有的Entity Framework模型中定义.我已经完成了大部分关于如何做到这一点的项目,但它仍然失败了.

有一点背景,这个实体模型至少在3年内没有更新.所以除了我要添加的列之外,我知道在那段时间里已经添加了许多其他列,但从未包括在内.我大约9个月前接手了这个项目,但从未能成功更新模型.

第一次尝试:

  • 在Visual Studio中打开模型
  • 右键单击背景
  • 单击"从数据库更新模型..."
  • 单击"刷新"选项卡
  • 选定的表格
  • 突出显示的具体表格
  • 单击完成

结果:

  • 删除了我模型中的数十个表的类
  • 有问题的表没有更新

第二次尝试

  • 恢复所有来源
  • 与上面相同但是
  • 打开更新向导后,单击"删除"选项卡
  • 选定的表格
  • 单击完成
  • 所有表格都被删除了
  • 保存EF模型/关闭/打开它
  • 返回更新向导添加选项卡
  • 点击表格
  • 扩展所有内容时,我的表都没有显示
  • 选中"表"级别的复选框

结果

  • 我没有添加任何表格,但添加了最初未包含的内容

第三次尝试

  • 恢复所有来源
  • 删除了两个.tt文件
  • 打开更新向导
  • 点击添加一切

结果

  • 没有重新创建,没有.tt文件或其他任何东西.

第四次尝试

  • 恢复来源
  • 从EF模型中删除了表格
  • 打开更新向导
  • 单击"添加表"

结果

  • 删除了我模型中的数十个表的类
  • 有问题的表格没有加回来

最后的尝试

  • 手动添加实体到模型

结果

  • 代码全部编译并运行,但从未从数据库中检索或更新值

我将非常感激任何可以提供的帮助或方向,因为我处于关键时刻并且必须更新模型.

entity-framework database-first ef-database-first

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

如何设置创建日期和修改日期以在DB第一种方法中进行设置

在我们的应用程序的每个SQL表中,我们都有"CreatedDate"和"ModifiedDate"列.我们正在使用DB第一种方法.当我保存数据时,我希望自动填充这两列.一种方法是getdate()在SQL表列本身上使用默认值.所以这将部分地解决问题.这意味着当实体是新的时,它将设置CreatedDate和ModifiedDate.但是,当我编辑/更新实体时,我只想ModifiedDate更新.
使用Code第一种方法有很多文章在做这件事.但我们正在使用DB第一种方法.
我有什么选择?

entity-framework ef-database-first

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

实体框架中多个"包含"的最佳实践是什么?

假设我们在数据模型中有四个实体:Categories,Books,Authors和BookPages.还假设Categories-Books,Books-Authors和Books-BookPages关系是一对多的.

如果从数据库中检索类别实体实例 - 包括"Books","Books.BookPages"和"Books.Authors" - 这将成为一个严重的性能问题.而且,不包括它们将导致"对象引用未设置为对象的实例"异常.

使用多个Include方法调用的最佳做法是什么?

  • 写一个方法GetCategoryById并包含所有项目(性能问题)
  • 写一个方法GetCategoryById并发送一个包含的关系列表(可能,但似乎还不够优雅)
  • 编写方法,如GetCategoryByIdWithBooks,GetCategoryByIdWithBooksAndBooksPages和GetCategoryByIdWithBooksAndAuthors(不实用)

编辑:通过第二个选项我的意思是这样的:

public static Category GetCategoryById(ModelEntities db, int categoryId, params string[] includeFields)
{
    var categories = db.Categories;

    foreach (string includeField in includeFields)
    {
        categories = categories.Include(includeField);
    }

    return categories.SingleOrDefault(i => i.CategoryId == categoryId);
}
Run Code Online (Sandbox Code Playgroud)

在调用时我们需要这样的代码:

Category theCategory1 = CategoryHelper.GetCategoryById(db, 5, "Books");
Category theCategory2 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages");
Category theCategory3 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Authors");
Category theCategory4 = CategoryHelper.GetCategoryById(db, 5, "Books", "Books.Pages", "Books.Authors");
Run Code Online (Sandbox Code Playgroud)

这种方法有任何明显的缺点吗?

c# architecture entity-framework data-access-layer ef-database-first

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

DB-First与ASP.NET Web API 2 + EF6的身份验证混淆

我需要为现有的MySQL数据库创建一个Web API C#应用程序.我已经设法使用Entity Framework 6将每个数据库表绑定到RESTful API (允许CRUD操作).

我想实现一个登录/注册系统(这样我以后就可以实现角色和权限,并限制某些API请求).

我必须使用的MySQL数据库有一个用户表(称为user),其中包含以下不言自明的列:

  • id
  • email
  • username
  • password_hash

似乎事实上的身份验证标准是ASP.Net Identity.我花了最后一小时试图弄清楚如何使Identity与现有的DB-First Entity Framework设置一起工作.

如果我尝试构造ApplicationUser存储user实例(MySQL数据库中的实体)的实例来检索用户数据,我会收到以下错误:

实体类型ApplicationUser不是当前上下文的模型的一部分.

我假设我需要在我的MySQL数据库中存储身份数据,但找不到任何有关如何执行此操作的资源.我已经尝试完全删除ApplicationUser类并使我的user实体类派生IdentityUser,但调用UserManager.CreateAsync导致LINQ to Entities转换错误.

如何在具有现有user实体的Web API 2应用程序中设置身份验证?

c# asp.net entity-framework ef-database-first asp.net-web-api2

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

如何更新 Scaffold-DbContext 生成的现有模型类

使用 ASP.NET CORE EF,我使用以下命令从现有数据库生成模型类:

Scaffold-DbContext "Server=myserver\mydb;Database=mydb;Trusted_Connection=True;" Microsoft.EntityFrameworkCore.SqlServer -OutputDir Models
Run Code Online (Sandbox Code Playgroud)

现在我的数据库发生了变化,例如我在表中添加了一个新列AppUser。我不想使用迁移来保持模型与数据库的同步。

我已经在数据库中进行了更改,现在我想从当前数据库状态更新现有的模型类。有什么建议如何做到这一点?

我是否应该删除现有的模型类并使用相同的命令重新生成Scaffold-DbContext,或者我们是否有任何其他方法使现有的模型类反映新的更改。

entity-framework ef-database-first asp.net-core

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

MySql实体框架6:数据库优先.如何创建课程?

到目前为止,我一直在使用EF6和Visual Studio,主要是代码优先,很少是数据库优先.

要导入一些测试数据,有人给了我与MySQL数据库的连接.在MySql Workbench中我可以查询数据,因此连接有效.

现在我想创建一个Entity Framework Database First项目并导入数据库模型.在Visual Studio中

  • 创建项目,
  • 添加nuget:Entity Framework最新版本(6.1.3)
  • 为EF 6添加nuget:MySql.Data.entities
  • 添加新项目

现在?有一个EF 6.X DbContext发生器,但是在我得到模型之前它不起作用

我可以做我通常做的事情:

  • 选择ADO.NET实体数据模型
  • 来自数据库的EF Designer
  • 现在?如何连接到MySql?

加成

Mehmet向我推荐了MySql EF6支持(感谢Mehmet),这是我用Google搜索时首先出现的页面.也许这是正确的方法,但我不明白它说的第一步:添加连接字符串并添加引用(= install nuget package?)我可以管理,但之后它对我来说都是希腊语:

  • 为MySql设置新的DbConfiguration类.DbConfiguration课程?哪个DbConfiguration班?在哪里,以及如何为MySQL设置它?
  • 添加DbConfigurationTypeAttributeDbContext.唉,我还没有得到DbContext的是,它不是第一个代码,但数据库首先:一些向导应该确定DbSetsDbContext我.

也许这就是要走的路,但这对我来说太过隐秘了.

mysql entity-framework ef-database-first

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

无法检索项目元数据.确保它是基于MSBuild的.NET Core项目

我一直在网上研究很多,但没有找到合适的解决方案.我试图通过使用数据库优先的脚手架方法来映射表模型,同时在应用命令时始终收到此错误,从而使用Entity Framework Core和MySQL

Unable to retrieve project metadata. Ensure it's an MSBuild-based .NET Core project. If you're using custom BaseIntermediateOutputPath or MSBuildProjectExtensionsPath values, Use the --msbuildprojectextensionspath option.
Run Code Online (Sandbox Code Playgroud)

这是我用来搭建数据库模型的命令:

Scaffold-DbContext "server=localhost;port=3306;user=root;password=1234;database=world" "Pomelo.EntityFrameworkCore.MySql" -OutputDir .\Models -f
Run Code Online (Sandbox Code Playgroud)

这是我的.Net Core项目设置:

  <ItemGroup>
    <PackageReference Include="Microsoft.EntityFrameworkCore.Tools" Version="2.0.1" />
    <PackageReference Include="Pomelo.EntityFrameworkCore.MySql" Version="2.0.1" />
  </ItemGroup>

  <ItemGroup>
    <DotNetCliToolReference Include="Microsoft.EntityFrameworkCore.Tools.DotNet" Version="2.0.1" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

mysql entity-framework ef-database-first asp.net-core-2.0 entity-framework-core-2.1

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

如何更改EF生成的类属性的[DisplayName]?

我们知道EF根据我们添加到.edmx文件的表生成类.哪个不会有[DisplayName] DataAnnotations.

如何在不修改生成的类的情况下添加此[DisplayName]?因为生成的类可以被覆盖如果我修改.edmx文件(重新添加修改的表),如果数据库更改.所以我不想修改生成类本身.

EF生成类

 public partial class Committee
    {
        public string Committee_Description { get; set; }
        public byte[] Committee_Id { get; set; }
        public string Rn_Descriptor { get; set; }
        public Nullable<System.DateTime> Rn_Create_Date { get; set; }
       ......
       .....
Run Code Online (Sandbox Code Playgroud)

视图

 <tr>
            <th>
                @Html.DisplayNameFor(model => model.Item2.GetEnumerator().Current.Committee_Name)
            </th>
Run Code Online (Sandbox Code Playgroud)

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

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

从Visual Studio数据库项目生成实体框架模型

我正在使用EF5和Database-First模型.和Visual Visual Studio中的数据库项目一起维护应用程序的Sql Server数据库模式.

要更新EF模型,我将在空数据库中部署更改...

是否可以从Visual Studio(2012)数据库项目生成和更新EF模型?

更新:dacpac文件生成它是一个不错的选择.可能吗?

更新: 在MS Build 2014大会上,ADO.NET团队建议EF的未来版本(如EF7)仅适用于Code First方法.

后来,他们澄清了新方法的名称,不应该是Code First,尽管代码库建模.也许并不完全相同,但据我所知,它似乎与我非常相似.

所以我要尝试@ adam0101解决方案.任何其他以CodeFisrt结尾的提议解决方案都是从SSDT项目迁移到EF的CodeFisrt项目,我想要的是两者的平滑共存(也许我是一个梦想家......).

c# entity-framework visual-studio ef-database-first visual-studio-2012

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