Tag: code first migration

EntityFramework匿名复合键属性名称冲突

我正在使用EntityFramework 5(或.Net Framework 4.0的4.3) 在我的DbContext对象中,我已经设置了正确的DbSet,并且对象包含彼此正确的引用。 这对我来说并不新鲜,而且事情进展顺利。 现在在这种情况下,我有一些复合键,有时包括表的外键(在这种情况下是对象)。 为此,我在HasKey()的OnModelCreating方法上使用HasKey()函数。 当这些属性具有不同的名称时,没有问题,但是当这些属性具有相同的名称时,无法进行迁移。 一个例子: protected override void OnModelCreating(DbModelBuilder modelBuilder) { // … modelBuilder.Entity().ToTable(“PatientVisits”); modelBuilder.Entity().HasKey(x => new { x.Patient.Code, x.Code }); // … base.OnModelCreating(modelBuilder); } 正如您在提供的代码中所看到的,对象PatientVisit具有名为Code的属性,但只要与不同的患者重复该属性,就可以重复此属性。 实体Patient还有一个名为Code的键。 匿名类型不能有两个推断同一名称的属性(显而易见)。 典型的解决方案是命名匿名类型的属性,如下所示: protected override void OnModelCreating(DbModelBuilder modelBuilder) { // … modelBuilder.Entity().ToTable(“PatientVisits”); modelBuilder.Entity().HasKey(x => new { PatientCode = x.Patient.Code, VisitCode = x.Code }); // […]

EF代码优先迁移:没有NUGET的MigrateDatabaseToLatestVersion

我需要帮助来阐明EF Code First Migrations如何在生产机器上运行。 我有一些实体类和DbContext派生类来访问实体。 现在,我想执行以下几项操作: 当我的应用程序启动时,它必须创建数据库,如果数据库不存在; 那么数据库模式必须调整到模型; 如果刚刚创建了数据库,我想创建一些索引; 另外,如果刚刚创建数据库,它必须由一些初始数据播种; 所有这些都必须自动执行,不需要任何NUGET命令或外部工具。 我已经阅读了一些关于迁移的文章,但是他们主要关注NUGET的使用或运行时的纯自动数据库更新(通过MigrateDatabaseToLatestVersion )。 我知道DbMigration类,但我无法理解,如何将MigrateDatabaseToLatestVersion策略和DbMigration粘合在一起。 UPDATE。 事实上,我不能在项目中使用NUGET,我需要“手动”进行迁移。

在代码第一entity framework中定义多对多关系

我在模型中有3个课程,如下所示。 [Table(“UserProfile”)] public class UserProfile { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string UserName { get; set; } public ICollection MartialArtUserProfiles { get; set; } } [Table(“MartialArt”)] public class MartialArt { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)] public int Id { get; set; } public string Name { get; set; } public string Description { […]

Code-First应用程序中的XML列

我正在尝试在Code First中创建XML列。 我很清楚Entity Framework不完全支持XML列,并且它将它们作为字符串读取。 没关系。 不过,我仍然希望列类型是XML。 这是我的class级: class Content { public int ContentId { get; set; } [Column(TypeName=”xml”)] public string XmlString { get; set; } [NotMapped] public XElement Xml { get { … } set { … } } } 问题是,Code First Migrations完全忽略Column属性并将字段创建为nvarchar(max) 。 我尝试使用[DataType(“xml”)] ,但这也没有用。 这是迁移错误吗?

具有代码优先迁移的一个DB上的多个DbContexts

我偶然发现了这个问题所描述的问题 。 另外,我不想从数据库中删除__migrationHistory表。 我尝试使用建议的解决方案使用一个“超级”上下文,其中包含所有DbSet s并使用正常的上下文,但我收到了一个错误。 (“模型支持DbContext已更改”)如果您只是从SQL服务器中删除__migrationHistory表,这很容易避免,但正如我所说,我想保留历史记录。 我找到了一个简单易用的解决方案,请参阅下面的答案。

可以在EF代码中设置第一个迁移种子方法的断点吗?

我在我的entity framework6的代码优先迁移过程的Configure.cs中的Seed方法中遇到了问题。 我在Package Manager Console运行Update-Database -verbose命令,并尝试在Seed方法的c#代码中设置断点(在VS studio web express 2013中)。 但即使我把它放在方法的第一个语句中,它也没有被命中,虽然控制台显示running seed method (并且由于我的错误而导致其中断) 那么可以在Seed方法中以某种方式设置断点吗? 如果没有,调试该代码的最佳方法是什么?

entity framework代码第一个DateTime字段更新修改

我有以下实体: public class User { public int UserId { get; set; } public string UserName { get; set; } public string UserAddress { get; set; } public DateTime CreateDate { get; set; } public DateTime? UpdateDate { get; set; } } 如何使User实体的UpdateDate字段成为更新时的服务器DateTime ? 也就是说,每当数据库中的实体被修改时, UpdateDate字段就会更改为确切的日期和时间,以及是否要说UpdateDate = new DateTime(Datetime.Now.Ticks)

MVC3中相同类型的实体之间的多对多关系

我有一个ASP.NET MVC3应用程序,我使用Entity Framework 4.3 Code-First和Migrations。 我一直在尝试在相同类型的实体之间创建多对多关系,但是当我使用迁移构建迁移时,它会生成一对一的关系。 这个想法是一个用户应该能够跟随多个其他用户(想想Twitter)。 我的User模型看起来像这样: public class User { public int UserId { get; set; } public string Name { get; set; } public DateTime Registered { get; set; } … public virtual ICollection Follows { get; set; } } 当我构建添加的Follows属性时,我得到这样的迁移: public partial class FollowUser : DbMigration { public override void Up() […]

Microsoft.AspNet.Identity.EntityFramework.IdentityUser的外键?

我在VS 2013,刚刚创建了一个MVC应用程序。 我正在创建一个对象,我打算在结果数据库中有一个AspNetUsers表的外键。 该项目确实有一个ApplicationUser(派生自IdentityUser),看起来像是与AspNetUsers表的属性列匹配。 我们如何正确地为此声明外键? public MyObject { public string UserId { get; set; } [ForeignKey(“UserId”)] public ApplicationUser User { get; set;} // other properties } 现在,我修改ApplicationUser以获得MyObjects的集合: public ApplicationUser : IdentityUser { public virtual ICollection MyObjects { get; set; } } 这似乎是如何在EF Code First中进行一对多操作。 但是,当我更新数据库时,我收到的错误表明身份成员(IdentityUserLogin,IdentityUserRole等)没有定义键。 也许那些课程不打算参加EF Code First Migrations? 我可以“到后面”并通过SQL语句添加外键,但如果我想从Code First再次更新,我可能会收到错误(数据库当前不匹配旧的迁移或类似的东西)。 我们如何正确地使用外键参考这些会员表? 我还尝试使用AspNetUsers表的匹配属性创建一个AspNetUser类。 我没有在Client类上使用“public ApplicationUser”,而是声明了“public […]