Tag: entity framework 5

entity framework5,首先从代码切换到数据库?

我已经使用代码创建了一个数据库。 它运作良好。 此后,在Visual Studio外部对数据库进行了许多更改。 如此多的迁移尝试都会产生错误。 所以我的问题是,有没有办法首先将解决方案从代码切换到数据库?

entity framework – 将表的列名称作为字符串数组

如果我首先使用EF 5和数据库生成数据库的.edmx模型,我如何获得实体列的列表? using (var db = new ProjectNameContext()) { // string[] colNames = db.Users. } 我正在寻找的是colNames [0] ==“Id”,colNames [1] ==“FirstName”等。

使用Entity Framework添加和更新实体

在我的上一个项目中,我使用了Entity Framework 5 Code First。 我完成了我的项目,但在开发过程中遇到了很多痛苦。 我试着解释下面的痛苦: 我的数据访问逻辑层有几个数据类,如Product,ProductCategory,Order,Company,Manufacturer等……每个类都有一些其他类的引用。 例如,Product实例具有ProductCategory属性。 在我的数据访问对象类的Add和Update方法中,我在上下文中将每个属性的状态(基本类型除外)设置为Unchanged或Modified。 下面是一些dao类的更新方法的一部分: context.Entry(entity).State = System.Data.EntityState.Modified; if (entity.Category != null) context.Entry(entity.Category).State = System.Data.EntityState.Unchanged; if (entity.Manufacturer != null) context.Entry(entity.Manufacturer).State = System.Data.EntityState.Unchanged; foreach (var specificationDefinition in entity.SpecificationDefinitions) { context.Entry(specificationDefinition).State = System.Data.EntityState.Unchanged; foreach (var specificationValue in specificationDefinition.Values) { context.Entry(specificationValue).State = System.Data.EntityState.Unchanged; } } 这段代码是这样的。 我的一些添加或更新方法大约有30行代码。 我认为我做错了什么,添加或更新实体应该不是那么痛苦但是当我没有设置对象的状态时,我要么在数据库中得到exception或重复的条目。 我是否真的必须设置映射到数据库的每个属性的状态?

entity framework代码第一次更新 – 数据库在CREATE DATABASE上失败

这篇文章已被注意到 这个也是 在我的开发机器上,我尝试使用包管理器控制台中的update-database重新创建我的数据库。 我相信我已按照上述post中的说明进行操作。 我收到此错误消息: 发生文件激活错误。 物理文件名’\ WRDatabase.mdf’可能不正确。 诊断并更正其他错误,然后重试该操作。 CREATE DATABASE失败。 无法创建列出的某些文件名。 检查相关错误。 我正在运行的命令是: update-database -ConfigurationTypeName WRConfiguration -ConnectionStringName localWR -Verbose 请注意,在上面的命令中,我传递了连接字符串名称,并且看起来正在使用连接字符串,因为.mdf文件的名称出现在错误消息中。 有趣的是,我能够运行我的代码并且我的数据库已经创建,但它是用错误的名称创建的(它被命名为“VIN.DataModel.WRContext”,它是DbContext的完整命名空间和类名)。 我的猜测是,当我的代码运行时,EF无法找到用于创建数据库的连接字符串。 这是故意的,因为我将此上下文映射到在服务器上运行的数据库以及在本地计算机上运行的db的副本(即,我将为相同的DbContext使用两个连接字符串)。 这是应用程序配置: 在Configuration类的构造函数中,AutomaticMigrationsEnabled设置为false。 这是上下文类: public class WRContext : DbContext { static WRContext() { Database.SetInitializer(new MigrateDatabaseToLatestVersion()); } public WRContext() { } public WRContext(string connectionString) : base(connectionString) { } public DbSet Emps { get; […]

忽略TransactionScope以进行特定查询

我正在寻找一种在TransactionScope处于活动状态时执行查询的方法,并忽略TransactionScope – 基本上,我想执行此特定查询,无论如何。 我首先使用EF代码,并且设计应用程序的方式,在一次调用中多次打开一个新的数据上下文,每个都有自己的更改,所有这些都包含在一个TransactionScope中,它具有Complete()假设没有失败,最后调用Complete() 。 在上下文中,我们重写了SaveChanges以便在base.SaveChanges()上发生任何exception时,我们可以捕获它并在回滚事务之前登录到数据库。 由于SaveChanges发生在事务内部,因此记录显然不会发生,因为它属于与原始调用相同的事务。 我试图完全忽略TransactionScope的日志代码。 这是一些精简代码: // From the context public override int SaveChanges() { try { return base.SaveChanges(); } catch (Exception ex) { // Writes to the log table – I want this to run no matter what LogRepo.Log(/*stuff to log from the context*/); throw; } } // Inside the business […]

自动化EF-Migrations“Update-Database -Script”

我正在使用EF迁移来跟踪我们的EF代码优先数据库模型的更改。 现在我需要为每次迁移生成一个SQL脚本,以便我可以将这组脚本传递给DBA。 我能用Update-Database -Script …生成SQL脚本Update-Database -Script … 但是,我想自动化这个。 我希望-Script开关接受一个指定SQL编写位置的参数,但事实并非如此。 此外,输出重定向不起作用,因为SQL脚本不会写入STDOUT,而是写入临时文件。 我认为无法从脚本中获取该临时文件。 有关如何自动化迁移 – > SQL脚本生成的任何想法? 也许有一些我不知道的神奇的PowerShell技巧? 编辑:顺便说一句,使用migrate.exe或任何其他“迁移感知”方法不是一个选项,交付SQL脚本是必须的。

在将所有导航属性加载(懒惰或渴望)到内存之前对其进行过滤

对于未来的访问者:对于EF6,您最好使用filter,例如通过此项目: https : //github.com/jbogard/EntityFramework.Filters 在我们正在构建的应用程序中,我们应用“软删除”模式,其中每个类都有一个’已删除’布尔值。 实际上,每个类都只是inheritance自这个基类: public abstract class Entity { public virtual int Id { get; set; } public virtual bool Deleted { get; set; } } 举一个简短的例子,假设我有GymMember和Workout类: public class GymMember: Entity { public string Name { get; set; } public virtual ICollection Workouts { get; set; } } public class Workout: Entity { […]

EF5一对一无导航

我正在尝试一对一的关系,导航属性就在一边(MVC4,EF5,代码优先)。 public class User { public int UserId { get; set; } //PK public int RankId { get; set; } //FK public virtual Rank { get; set; } //Navigation } public class Rank { public int RankId { get; set; } } 组态: public class RankConfiguration : EntityTypeConfiguration { public RankConfiguration() { HasKey(e => e.RankId); […]

如何在Entity Framework 5中表达“有很多通过”的关系?

我试图使用Entity Framework 5来查询现有的MySQL数据库。 我使用代码优先创建一个基于代码的模型,该模型按照MSDN上的本教程映射到现有数据库。 我有两个表: users和buddies 。 User有id , name和email 。 Buddy有一个user_id和一个buddy_id 。 User有很多Buddies (也是Users )。 buddy_id列是返回Users表的外键。 所以每个User都有很多Users通过Buddies 。 public class User { public int Id { get; set; } public string Name { get; set; } public string Email { get; set; } public IList Buddies { get; set; } } 这是我的数据库访问代码: using (var […]

TextBoxFor()不生成validation标记

我有一个SQL Server 2012,其中我有AWARD表,有两列TITLE和MONTH。 TITLE是varchar(256),不能为NULL。 MONTH是int,可以为NULL。 使用VS2012 Ultimate和EF 5.0.0,MVC4应用程序中的TextBoxFor帮助程序不会为上面的TITLE列生成validation(data-val=”required” and data-val-required=”required message”) ,但是在同一视图中,MONTH正在获得正确的validation标记。 .edmx设计器确实显示TITLE是NonNullable,BUTT,自动生成的AWARD.cs文件没有TITLE列的[Required]属性。 我该怎么办? @model MyProject.Models.AWARD @{ ViewBag.Title = “Add Award”; Layout = “~/Views/Shared/_EditorLayout.cshtml”; } @using (Html.BeginForm()) { @Html.ValidationSummary(true) Add Award @Html.LabelFor(model => model.TITLE) @Html.TextAreaFor(model => model.TITLE) @Html.ValidationMessageFor(model => model.TITLE) @Html.LabelFor(model => model.MONTH) @Html.DropDownListFor(model => model.MONTH, new SelectList(MyProject.Models.Helpers.Months, “key”,”value”), “[Not Selected]”) @Html.ValidationMessageFor(model => model.MONTH) @Html.ActionLink(“Cancel”, […]