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