标签: ef-database-first

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

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

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

我正在使用Database First(因为数据库已经存在并且它是"主")和EF 4.x DbContext Generator,它开箱即用(虽然命名很糟的类和属性).

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

实体类型[实体名称]不是当前上下文的模型的一部分.

这显然是为什么它没有找到表:没有什么告诉它如何匹配实体名称和表,因为我在运行中更改它.我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这不在Database First中使用(默认的T4模板在其中添加了一个例外,以防万一).

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

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

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

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

c# entity-framework entity-framework-4 database-first ef-database-first

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

实体框架可以在没有交集对象的情况下处理多对多关系吗?

使用数据库第一个模型:假设我们有经典的表Student,CourseStudentCourse(后者显然有FKS到StudentCourse).

如果将此模型导入EF,您将获得为每个模型生成的对象.在StudentCourse班将各自拥有的集合StudentCourses,从中你需要跳到另一个关系去的CourseStudent分别.

我希望以这样的方式生成代码,使得底层交集表是不可见的,即Student具有集合Courses,并且Course具有集合Students.我已经在其他ORM软件(特别是TopLink)中看到了这一点.可以在EF中完成吗?

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

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

实体框架 - DB-First - 复合外键

我有一个数据库,其中包含一个带有2列主复合键的表(一个int,一个bigint.)我有两个具有复合外键的表,引用第一个表的复合主键.(就我所知,)数据库本身的关系很好,很花哨.

通过DB-first EF6生成DB上下文时,这些关系/导航属性不会在生成的模型中表示(两个子表中没有虚拟成员引用父表.)

由于它是db-first,我无法修改模型.

entity-framework composite-key database-first ef-database-first entity-framework-6

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

在实体框架中使用savechanges()时,列名无效

所以这是交易,我已经改变了我的数据库模式,并改变了我的一个表的PK,并且删除了与旧PK相关的所有内容(另一个表中的FK引用).

但是,当我使用savechanges()方法插入新实体时,我有这个例外

ex = {"更新条目时发生错误.有关详细信息,请参阅内部异常."}

而内在的例外是

InnerException = {"无效的列名'Audit_ID'."}

Audit_ID是旧的PK.

尝试使用SQL将数据插入数据库时​​,我尝试了这个 "无效的列名"

尝试使用DbContext将实体添加到数据库时,列名无效

映射后列名无效

并没有解决我的问题,所以当我删除我的整个edmx并创建一个新的也没有用.

ps:我正在使用数据库第一种方法

sql-server asp.net-mvc entity-framework ef-database-first entity-framework-6

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

实体框架核心数据库 - 初始支架后的第一次更新?

我正在玩Entity Framework Core,我一直致力于实现Database-First应用程序.最初的Scaffold-DbContext命令工作得很好,并且如果没有按照我的意愿组织,则正确地创建我的所有实体.它是一个SQL Server数据库,它使用模式来分解责任区域,我并不真正关心Scaffold将它们全部放入一个文件夹的事实.

除此之外,我无法确定在数据库更新发生后是否有办法重新运行Scaffold来更新类.我能找到的最接近的是使用-force参数重新运行Scaffold-DbContext命令.但是,这也会覆盖我添加到Context.cs文件中的任何自定义代码,例如将连接字符串指向配置值而不是硬编码.

我已经看了几个与此类似的问题,但它只讨论了最初的脚手架,而不是进一步的更新.

有没有办法手动编码任何未来的变化来做到这一点?没有它,似乎使数据库优先的方法完全没有EF Core的价值.

entity-framework ef-database-first entity-framework-core

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

首先是MVC3和EF数据:最佳实践是什么?

似乎MVC3和EF4.1的大部分焦点都围绕着"代码优先" - 我似乎无法找到符合以下条件的任何示例或教程:

  • 使用现有的SQLServer数据库
  • 有单独的Web和数据访问项目(我们将有多个Web应用程序共享相同的数据访问类)
  • 验证建议

这样的示例或教程是否存在?是否有任何记录的"最佳实践"如何实现这一点,或者没有以这种方式构建解决方案的理由?

entity-framework entity-framework-4.1 asp.net-mvc-3 database-first ef-database-first

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

在EF Database First项目中更新模型

我继承了一个使用Entity Framework Database First的项目.我正在尝试更新数据库时如何更新模型类,但我无法弄明白.到目前为止,我已经完成了一个名为Test的列到数据库中的表,然后在模型浏览器中我右键单击了.edmx文件并从数据库中选择了Update Model,然后按照出现的向导中的选项进行操作.现在,当我查看打开.edmx文件时呈现的数据库关系图时,我可以看到测试列已添加到表中.问题是相应的C#模型类没有更新.我不认为我必须手动更新它,因为文件顶部有此消息

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
Run Code Online (Sandbox Code Playgroud)

所以问题是,如何更新此模型文件?我必须要做些什么才能做到这一点?

谢谢,

萨钦

edmx entity-framework-4 ef-database-first

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

实体框架数据库第一 - 复合外键

我有一个包含几个复合外键的数据库.例如,以下是外键的生成脚本:

ALTER TABLE [dbo].[WorkingRosters]  WITH NOCHECK ADD  CONSTRAINT
[FK_WorkingRoster_ShiftLeaveCode] FOREIGN KEY([OrganizationID], [ShiftLeaveCode])
REFERENCES [dbo].[ShiftLeaveCodes] ([OrganizationID], [Code])
GO
Run Code Online (Sandbox Code Playgroud)

我正在尝试使用Entity Framework 5 Database-First从此数据库生成模型.但是,不会使用所有表和其他简单外键生成组合外键的关联.

我怎么能:

  1. 在edmx后面的xml中手动创建这些复合外键(痛苦)
  2. 让实体框架正确生成这些外键,以便我有映射

谢谢!

entity-framework composite-key ef-database-first entity-framework-5

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

什么将ApplicationUser绑定到Database First中的aspnetusers表?

我在一个单独的库(例如Common.Feedback.Data)中有一个数据库优先的EDMX模型,它包括AspNetUser表及其相关的Identity Framework表(从另一个现有的,工作的,数据库/应用程序中提取).

我已更新ApplicationDbContext连接字符串以指向新模型和新数据库连接:

using System.Data.Entity;
using System.Security.Claims;
using System.Threading.Tasks;
using Microsoft.AspNet.Identity;
using Microsoft.AspNet.Identity.EntityFramework;

namespace Feedback.MvcApplication.Models
{
    // You can add profile data for the user by adding more properties to your ApplicationUser class, please visit http://go.microsoft.com/fwlink/?LinkID=317594 to learn more.

    public class ApplicationUser : IdentityUser
    {
        public async Task<ClaimsIdentity> GenerateUserIdentityAsync(UserManager<ApplicationUser> manager)
        {
            // Note the authenticationType must match the one defined in CookieAuthenticationOptions.AuthenticationType
            var userIdentity = await manager.CreateIdentityAsync(this, DefaultAuthenticationTypes.ApplicationCookie);
            // Add custom user claims here …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc ef-database-first entity-framework-6 asp.net-identity

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

SimpleMembershipInitializer不会初始化

我正在努力在我的EntityFramework/MVC4/DatabaseFirst项目中使用简单的成员方案.我已经找到了很多首先使用代码的例子,但是对于DB来说没什么.

我遇到的问题是InitializeDatabaseConnection抛出一个错误("无法找到请求的.Net Framework数据提供程序.它可能没有安装.")代码如下所示:

WebSecurity.InitializeDatabaseConnection("DALEntities", "tblContacts1", "ContactID", "EMail", autoCreateTables: true);
Run Code Online (Sandbox Code Playgroud)

我不确定DataProvider失败了什么.如果我尝试跟踪'into'InitializeDatabaseConnection调用,它会立即抛出错误.

我错过了什么?

信息:
DALEntities是EF其余部分使用的connectionString的名称.以下代码工作正常....

    public ActionResult Test() {
        using (var db = new DALEntities()) {
            var query = from i in db.TBLINVENTORies
                            orderby i.ITEMNAME
                            select i;
            var cnt = query.Count();
            string str = "Total Inventory: " + cnt;
            return Content(str);
        }
    }
Run Code Online (Sandbox Code Playgroud)

我在web.config中的连接字符串部分:

  <connectionStrings>
    <add name="DALEntities" connectionString="metadata=res://*/DAL.DAL.csdl|res://*/DAL.DAL.ssdl|res://*/DAL.DAL.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" />
  </connectionStrings>
Run Code Online (Sandbox Code Playgroud)

这篇文章似乎问了同样的问题(但是在模型优先的背景下),但还没有解决方案:使用SimpleMembership和EF模型优先

另外,我看到WebSecurity.InitializeDatabaseConnection()帮助文本有一个重载:Initializes the membership system ((blah blah <snip> ProviderName: the …

ef-database-first asp.net-mvc-4 simplemembership

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