我正在尝试使用实体框架6.0和数据库第一种方法实现继承.好吧,假设我有一个像下面这样Person的Organization实体:
// 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) 我在数据库中的表中添加了一个新列.该表已在现有的Entity Framework模型中定义.我已经完成了大部分关于如何做到这一点的项目,但它仍然失败了.
有一点背景,这个实体模型至少在3年内没有更新.所以除了我要添加的列之外,我知道在那段时间里已经添加了许多其他列,但从未包括在内.我大约9个月前接手了这个项目,但从未能成功更新模型.
第一次尝试:
结果:
第二次尝试
结果
第三次尝试
结果
第四次尝试
结果
最后的尝试
结果
我将非常感激任何可以提供的帮助或方向,因为我处于关键时刻并且必须更新模型.
在我们的应用程序的每个SQL表中,我们都有"CreatedDate"和"ModifiedDate"列.我们正在使用DB第一种方法.当我保存数据时,我希望自动填充这两列.一种方法是getdate()在SQL表列本身上使用默认值.所以这将部分地解决问题.这意味着当实体是新的时,它将设置CreatedDate和ModifiedDate.但是,当我编辑/更新实体时,我只想ModifiedDate更新.
使用Code第一种方法有很多文章在做这件事.但我们正在使用DB第一种方法.
我有什么选择?
假设我们在数据模型中有四个实体:Categories,Books,Authors和BookPages.还假设Categories-Books,Books-Authors和Books-BookPages关系是一对多的.
如果从数据库中检索类别实体实例 - 包括"Books","Books.BookPages"和"Books.Authors" - 这将成为一个严重的性能问题.而且,不包括它们将导致"对象引用未设置为对象的实例"异常.
使用多个Include方法调用的最佳做法是什么?
编辑:通过第二个选项我的意思是这样的:
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
我需要为现有的MySQL数据库创建一个Web API C#应用程序.我已经设法使用Entity Framework 6将每个数据库表绑定到RESTful API (允许CRUD操作).
我想实现一个登录/注册系统(这样我以后就可以实现角色和权限,并限制某些API请求).
我必须使用的MySQL数据库有一个用户表(称为user),其中包含以下不言自明的列:
idemailusernamepassword_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
使用 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,或者我们是否有任何其他方法使现有的模型类反映新的更改。
到目前为止,我一直在使用EF6和Visual Studio,主要是代码优先,很少是数据库优先.
要导入一些测试数据,有人给了我与MySQL数据库的连接.在MySql Workbench中我可以查询数据,因此连接有效.
现在我想创建一个Entity Framework Database First项目并导入数据库模型.在Visual Studio中
现在?有一个EF 6.X DbContext发生器,但是在我得到模型之前它不起作用
我可以做我通常做的事情:
加成
Mehmet向我推荐了MySql EF6支持(感谢Mehmet),这是我用Google搜索时首先出现的页面.也许这是正确的方法,但我不明白它说的第一步:添加连接字符串并添加引用(= install nuget package?)我可以管理,但之后它对我来说都是希腊语:
DbConfiguration课程?哪个DbConfiguration班?在哪里,以及如何为MySQL设置它?DbConfigurationTypeAttribute到DbContext.唉,我还没有得到DbContext的是,它不是第一个代码,但数据库首先:一些向导应该确定DbSets在DbContext我.也许这就是要走的路,但这对我来说太过隐秘了.
我一直在网上研究很多,但没有找到合适的解决方案.我试图通过使用数据库优先的脚手架方法来映射表模型,同时在应用命令时始终收到此错误,从而使用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
我们知道EF根据我们添加到.edmx文件的表生成类.哪个不会有[DisplayName] DataAnnotations.
如何在不修改生成的类的情况下添加此[DisplayName]?因为生成的类可以被覆盖如果我修改.edmx文件(重新添加修改的表),如果数据库更改.所以我不想修改生成类本身.
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
我正在使用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
entity-framework ×10
c# ×4
mysql ×2
architecture ×1
asp.net ×1
asp.net-core ×1
asp.net-mvc ×1
inheritance ×1