我正在启动一个必须使用现有数据库的新应用程序,该数据库使用一些在.net中非常烦人的命名约定(表名以几个指定表的业务域的三元组开头,列名以表trigram开头,三元组是大写的,由下划线等分隔,).
我想做的是编写一个简单的重命名规则(这很简单,就像找到最后一个下划线并在此之后采取一切)并将其应用于实体框架中.我真的不想在编辑器中逐个编辑名称,特别是因为数据库可能会改变,我不想多次这样做.
我正在使用Database First(因为数据库已经存在并且它是"主")和EF 4.x DbContext Generator,它开箱即用(虽然命名很糟的类和属性).
我编辑了T4模板以重命名生成的实体和属性,但是当我尝试执行任何请求时,DbContext对象找不到与我尝试请求的实体匹配的表,并且我得到了以下异常:
实体类型[实体名称]不是当前上下文的模型的一部分.
这显然是为什么它没有找到表:没有什么告诉它如何匹配实体名称和表,因为我在运行中更改它.我读到我可以在OnModelCreating(DbModelBuilder modelBuilder)方法中添加指令,但这不在Database First中使用(默认的T4模板在其中添加了一个例外,以防万一).
所以现在我卡住了,我不知道如何指定匹配.
以下是我的几个想法,但不确定它是否正确或可行:
任何的想法 ?还是我错过了什么?
c# entity-framework entity-framework-4 database-first ef-database-first
使用数据库第一个模型:假设我们有经典的表Student,Course和StudentCourse(后者显然有FKS到Student和Course).
如果将此模型导入EF,您将获得为每个模型生成的对象.在Student和Course班将各自拥有的集合StudentCourses,从中你需要跳到另一个关系去的Course或Student分别.
我希望以这样的方式生成代码,使得底层交集表是不可见的,即Student具有集合Courses,并且Course具有集合Students.我已经在其他ORM软件(特别是TopLink)中看到了这一点.可以在EF中完成吗?
我有一个数据库,其中包含一个带有2列主复合键的表(一个int,一个bigint.)我有两个具有复合外键的表,引用第一个表的复合主键.(就我所知,)数据库本身的关系很好,很花哨.
通过DB-first EF6生成DB上下文时,这些关系/导航属性不会在生成的模型中表示(两个子表中没有虚拟成员引用父表.)
由于它是db-first,我无法修改模型.
entity-framework composite-key database-first ef-database-first entity-framework-6
所以这是交易,我已经改变了我的数据库模式,并改变了我的一个表的PK,并且删除了与旧PK相关的所有内容(另一个表中的FK引用).
但是,当我使用savechanges()方法插入新实体时,我有这个例外
ex = {"更新条目时发生错误.有关详细信息,请参阅内部异常."}
而内在的例外是
InnerException = {"无效的列名'Audit_ID'."}
Audit_ID是旧的PK.
尝试使用SQL将数据插入数据库时,我尝试了这个 "无效的列名"
并没有解决我的问题,所以当我删除我的整个edmx并创建一个新的也没有用.
ps:我正在使用数据库第一种方法
sql-server asp.net-mvc entity-framework ef-database-first entity-framework-6
我正在玩Entity Framework Core,我一直致力于实现Database-First应用程序.最初的Scaffold-DbContext命令工作得很好,并且如果没有按照我的意愿组织,则正确地创建我的所有实体.它是一个SQL Server数据库,它使用模式来分解责任区域,我并不真正关心Scaffold将它们全部放入一个文件夹的事实.
除此之外,我无法确定在数据库更新发生后是否有办法重新运行Scaffold来更新类.我能找到的最接近的是使用-force参数重新运行Scaffold-DbContext命令.但是,这也会覆盖我添加到Context.cs文件中的任何自定义代码,例如将连接字符串指向配置值而不是硬编码.
我已经看了几个与此类似的问题,但它只讨论了最初的脚手架,而不是进一步的更新.
有没有办法手动编码任何未来的变化来做到这一点?没有它,似乎使数据库优先的方法完全没有EF Core的价值.
似乎MVC3和EF4.1的大部分焦点都围绕着"代码优先" - 我似乎无法找到符合以下条件的任何示例或教程:
这样的示例或教程是否存在?是否有任何记录的"最佳实践"如何实现这一点,或者没有以这种方式构建解决方案的理由?
entity-framework entity-framework-4.1 asp.net-mvc-3 database-first 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)
所以问题是,如何更新此模型文件?我必须要做些什么才能做到这一点?
谢谢,
萨钦
我有一个包含几个复合外键的数据库.例如,以下是外键的生成脚本:
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从此数据库生成模型.但是,不会使用所有表和其他简单外键生成组合外键的关联.
我怎么能:
谢谢!
entity-framework composite-key ef-database-first entity-framework-5
我在一个单独的库(例如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
我正在努力在我的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="data source=SOMECOMPUTER;initial catalog=SOMEDB;persist security info=True;user id=SOMEID;password=SOMEPASS;multipleactiveresultsets=True;App=EntityFramework"" providerName="System.Data.EntityClient" />
</connectionStrings>
Run Code Online (Sandbox Code Playgroud)
这篇文章似乎问了同样的问题(但是在模型优先的背景下),但还没有解决方案:使用SimpleMembership和EF模型优先
另外,我看到WebSecurity.InitializeDatabaseConnection()帮助文本有一个重载:Initializes the membership system ((blah blah <snip> ProviderName: the …