实体框架代码第一个数据注释MaxLength和表不起作用

时间:2017-07-19 09:16:41

标签: entity-framework annotations ef-code-first code-first

我使用Code First方法从我的模型中创建数据库,我在我的类中使用数据注释,如下所示:

using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;

[Table("Cat1")]
public class Cat
{
    public int ID { get; set; }
    [Required]
    [MaxLength(50)]
    public string Nombre { get; set; }
    [StringLength(500)]
    public string Descripción { get; set; }
}

using System.Data.Entity;
public class Contexto: DbContext  {
    public DbSet<Cat> Cats { get; set; }
    protected override void OnModelCreating(DbModelBuilder MB) {
        MB.Conventions.Remove<PluralizingTableNameConvention>();
        MB.Conventions.Remove<OneToManyCascadeDeleteConvention>();
        MB.Conventions.Remove<ForeignKeyIndexConvention>();
        MB.Conventions.Remove<ManyToManyCascadeDeleteConvention>();
        MB.ComplexType<Departamento>(); 
        MB.ComplexType<Porción>();
    }
}

但由于某种原因,只应用[Required]和[StringLength]注释。我的数据库结束如下:

TABLE [dbo].[Cats] (
    [ID]          INT            IDENTITY (1, 1) NOT NULL,
    [Nombre]      NVARCHAR (MAX) NOT NULL,
    [Descripción] NVARCHAR (500) NULL,
    CONSTRAINT [PK_dbo.Cats] PRIMARY KEY CLUSTERED ([ID] ASC)
);

我想知道为什么有些注释在起作用而其他注释没有。我知道我可以使用&#39; StringLength&#39;而不是&#39; MaxLength&#39;,但我没有其他选择&#39;表&#39;和其他一些可能有同样问题的人。它曾经工作了一段时间,但后来突然停止工作。我如何制作&#39; MaxLenght&#39;和&#39;表&#39;注释再次起作用?编辑:其他注释无效:ComplexType和NotMapped。

我使用的是EF 6.1.3和targetframework net40以及Visual Studio 2017。

谢谢!

1 个答案:

答案 0 :(得分:0)

因此,经过许多个小时,我决定从头开始整个项目。我这次唯一不同的是在添加任何引用或NuGet包之前,在每个项目的开头指定.Net Framework 4.0。我认为,上次我手动移动了很多东西,最终混淆了视觉工作室,因为intellisense它很好,Table,ComplexType和NotMaped注释,但实际上没有应用。