Entity Framework Code First 数据注释 MaxLength 和 Table 不工作
Entity Framework Code First Data Annotation MaxLength and Table Not Working
我使用 Code First 方法从我的模型创建我的数据库,我在我的 class 中使用数据注释,如下所示:
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)
);
我想知道为什么有些注释有效而有些却无效。我知道我可以使用 'StringLength' 而不是 'MaxLength',但是对于 'Table' 和其他一些可能有相同问题的人我没有其他选择。它曾经可以正常工作一段时间,但突然停止工作。如何使 'MaxLenght' 和 'Table' 注释再次起作用?编辑:其他注释不起作用:ComplexType 和 NotMapped。
我正在使用 EF 6.1.3 和 targetframework net40 和 Visual Studio 2017。
谢谢!
因此,经过许多小时后,我决定从头开始整个项目。这次我唯一不同的是在每个项目开始时指定 .Net Framework 4.0,然后再添加任何引用或 NuGet 包。我认为上次我手动移动了很多东西,最终导致混淆 visual studio,对于智能感知来说很好 Table,ComplexType 和 NotMaped 注释但实际上没有应用。
我使用 Code First 方法从我的模型创建我的数据库,我在我的 class 中使用数据注释,如下所示:
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)
);
我想知道为什么有些注释有效而有些却无效。我知道我可以使用 'StringLength' 而不是 'MaxLength',但是对于 'Table' 和其他一些可能有相同问题的人我没有其他选择。它曾经可以正常工作一段时间,但突然停止工作。如何使 'MaxLenght' 和 'Table' 注释再次起作用?编辑:其他注释不起作用:ComplexType 和 NotMapped。
我正在使用 EF 6.1.3 和 targetframework net40 和 Visual Studio 2017。
谢谢!
因此,经过许多小时后,我决定从头开始整个项目。这次我唯一不同的是在每个项目开始时指定 .Net Framework 4.0,然后再添加任何引用或 NuGet 包。我认为上次我手动移动了很多东西,最终导致混淆 visual studio,对于智能感知来说很好 Table,ComplexType 和 NotMaped 注释但实际上没有应用。