0

这是我的 POCO

public class Game
{
    public Guid Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Galaxy> Galaxies { get; set; }
}

这是 TypeConfiguration ....

public class GameConfiguration : EntityTypeConfiguration<Game>
{
    public GameConfiguration()
    {
        HasKey(x => x.Id);
        Property(x => x.Id).HasDatabaseGeneratedOption(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity);

        HasMany(x => x.Galaxies);

        Property(x => x.Name)
            .IsRequired()
            .HasMaxLength(50);
    }
}

我的问题是......为什么,当它作为迁移添加时,迁移代码不会将“名称”属性设置为“非空”?它也忽略了 MaxLength 设置。为什么是这样?

CreateTable(
    "dbo.Games",
    c => new
    {
        Id = c.Guid(nullable: false),
        Name = c.String(),
    })
    .PrimaryKey(t => t.Id);
4

1 回答 1

1

乍一看,您的配置的其余部分与约定会发生的情况相匹配,即使配置构造函数从未运行并且如果 name 属性丢失可以解释它。缺少在模型构建器中注册配置的代码。

您可以注册实体配置,例如在 OnModelCreated 方法中,如下所示:

modelBuilder.Configurations.Add(new GameConfiguration());
于 2013-10-28T17:17:14.760 回答