数据库迁移

Laravel 6.5.1 发布了,这是一个补丁版本,包含一些更改和修复。

当 Entity Framework Code First
的数据模型发生改变时,默认会引发一个System.InvalidOperationException
的异常。解决方法是使用DropCreateDatabaseAlways
或DropCreateDatabaseIfModelChanges,让Entity Framework
自动将数据库删除,然后重新创建。不过,这种方式过于残暴,应该使用更人性化的方式,让Entity
Framework
帮助我们自动调整数据库架构。并且仍然保留现有数据库中的数据。而这种开发技术就是 
Code First 数据库迁移(DB Migration)。

除非条件为假,否则 @includeUnless 指令包括模板:

首先,我们先用 Code First
方式建立一个简单的ASP.NET MVC4
应用程序

{{-- Instead of this --}}
@includeWhen(! $headless, 'dashboard/partials/nav')

{{-- You can do this --}}
@includeUnless($headless, 'dashboard/partials/nav')

图片 1

此外,新版本通过传递计数值并将默认值更新为等于 1 来修复 PhpRedis spop
实现。 

图片 2

Model::isDirty() 检查也获得了针对集合和对象强制转换的修复程序。

 

6.5.1 版本更新列表:

在Models 文件夹下建立两个实体类Member、Guestbook。

Added

  • 添加了 includeUnless 指令
    (#30538)

Member 实体类定义如下:

Fixed

  • 修复了 PhpRedisConnection::spop() 方法中 $count 的默认值
    (#30546)
  • 修复了多模式 Postgres 的破坏兼容性
    (#30562, 6460d2b)
  • 修复 Model::isDirty()
    (#30565)
  • 修复 MailgunTransport::send() 中的 bcc
    (#30569)

[csharp] view
plain
copy
print?

Changed

  • 从 Container 包中删除 illuminate/support 依赖项
    (#30518, #30528)

更新说明:

(文/开源中国)    

  1. namespace CodeFirstDemo.Models  
  2. {  
  3.     public partial class Member  
  4.     {  
  5.         public Member()  
  6.         {  
  7.             this.Guestbooks = new List<Guestbook>();  
  8.         }  
  9.   
  10.         public int Id { get; set; }  
  11.         public string Name { get; set; }  
  12.         public string Email { get; set; }  
  13.         public virtual ICollection<Guestbook> Guestbooks { get; set; }  
  14.     }  
  15. }  

图片 3

namespace CodeFirstDemo.Models
{
    public partial class Member
    {
        public Member()
        {
            this.Guestbooks = new List<Guestbook>();
        }

        public int Id { get; set; }
        public string Name { get; set; }
        public string Email { get; set; }
        public virtual ICollection<Guestbook> Guestbooks { get; set; }
    }
}

Guestbook 实体类定义如下:

[csharp] view
plain
copy
print?

  1. namespace CodeFirstDemo.Models  
  2. {  
  3.     public partial class Guestbook  
  4.     {  
  5.         public int Id { get; set; }  
  6.         public string Message { get; set; }  
  7.         public System.DateTime CreatedOn { get; set; }  
  8.         public int MemberId { get; set; }  
  9.         public virtual Member Member { get; set; }  
  10.     }  
  11. }  

图片 4

namespace CodeFirstDemo.Models
{
    public partial class Guestbook
    {
        public int Id { get; set; }
        public string Message { get; set; }
        public System.DateTime CreatedOn { get; set; }
        public int MemberId { get; set; }
        public virtual Member Member { get; set; }
    }
}

在Models 文件夹下建立Mapping
文件夹,并建立对应实体类的关系映射类MemberMap 、GuestbookMap

 

MemberMap 类定义如下:

[csharp] view
plain
copy
print?

  1. namespace CodeFirstDemo.Models.Mapping  
  2. {  
  3.     public class MemberMap : EntityTypeConfiguration<Member>  
  4.     {  
  5.         public MemberMap()  
  6.         {  
  7.             // Primary Key  
  8.             this.HasKey(t => t.Id);  
  9.   
  10.             // Properties  
  11.             this.Property(t => t.Id)  
  12.                 .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);  
  13.   
  14.             this.Property(t => t.Name)  
  15.                 .IsRequired()  
  16.                 .HasMaxLength(10);  
  17.   
  18.             this.Property(t => t.Email)  
  19.                 .IsRequired()  
  20.                 .HasMaxLength(200);  
  21.   
  22.             // Table & Column Mappings  
  23.             this.ToTable(“Member”);  
  24.             this.Property(t => t.Id).HasColumnName(“Id”);  
  25.             this.Property(t => t.Name).HasColumnName(“Name”);  
  26.             this.Property(t => t.Email).HasColumnName(“Email”);  
  27.         }  
  28.     }  
  29. }  

图片 5

namespace CodeFirstDemo.Models.Mapping
{
    public class MemberMap : EntityTypeConfiguration<Member>
    {
        public MemberMap()
        {
            // Primary Key
            this.HasKey(t => t.Id);

            // Properties
            this.Property(t => t.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);

            this.Property(t => t.Name)
                .IsRequired()
                .HasMaxLength(10);

            this.Property(t => t.Email)
                .IsRequired()
                .HasMaxLength(200);

            // Table & Column Mappings
            this.ToTable("Member");
            this.Property(t => t.Id).HasColumnName("Id");
            this.Property(t => t.Name).HasColumnName("Name");
            this.Property(t => t.Email).HasColumnName("Email");
        }
    }
}

GuestbookMap 类定义如下:

[csharp] view
plain
copy
print?

  1. namespace CodeFirstDemo.Models.Mapping  
  2. {  
  3.     public class GuestbookMap : EntityTypeConfiguration<Guestbook>  
  4.     {  
  5.         public GuestbookMap()  
  6.         {  
  7.             // Primary Key  
  8.             this.HasKey(t => t.Id);  
  9.   
  10.             // Properties  
  11.             this.Property(t => t.Message)  
  12.                 .IsRequired()  
  13.                 .HasMaxLength(200);  
  14.   
  15.             // Table & Column Mappings  
  16.             this.ToTable(“Guestbook”);  
  17.             this.Property(t => t.Id).HasColumnName(“Id”);  
  18.             this.Property(t => t.Message).HasColumnName(“Message”);  
  19.             this.Property(t => t.CreatedOn).HasColumnName(“CreatedOn”);  
  20.             this.Property(t => t.MemberId).HasColumnName(“MemberId”);  
  21.   
  22.             // Relationships  
  23.             this.HasRequired(t => t.Member)  
  24.                 .WithMany(t => t.Guestbooks)  
  25.                 .HasForeignKey(d => d.MemberId);  
  26.   
  27.         }  
  28.     }  
  29. }  

图片 6

发表评论

电子邮件地址不会被公开。 必填项已用*标注