实体类型需要定义主键-主键是已定义的唯一内容

时间:2019-10-24 17:56:19

标签: c# asp.net-core entity-framework-core

我正在尝试将模型添加到我正在从事的项目中,今天却遇到了一个问题,即每次我尝试添加迁移时,都会出现错误“实体类型'_____'需要定义一个主键”。该模型具有一个称为“ ID”的属性,我尝试向其添加[Key]属性,甚至尝试删除除ID属性之外的所有内容,但该方法仍然无法使用。

这是模型:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace APD_Remastered_Ideas.Models
{
    public class TestModel
    {
        [Key]
        public int Id;
        public string address { get; set; }
    }
}

编辑:我也尝试过自己编写迁移文件:

using Microsoft.EntityFrameworkCore.Metadata;
using Microsoft.EntityFrameworkCore.Migrations;

namespace APD_Remastered_Ideas.Data.Migrations
{
    public partial class addTestModelToDb : Migration
    {
        protected override void Up(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.CreateTable(
            name: "TestModel",
            columns: table => new
            {
                Id = table.Column<int>(nullable: false)
                    .Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
            },
            constraints: table =>
            {
                table.PrimaryKey("PK_TestModel", x => x.Id);
            });
        }

        protected override void Down(MigrationBuilder migrationBuilder)
        {
            migrationBuilder.DropTable(
            name: "TestModel");
        }
    }
}

我还尝试了在SSMS中手动创建表。在我所有其他项目中,以这种方式添加模型仍然有效。但是,在这个项目中,我无法添加任何内容。

有人知道我在做什么错吗?

1 个答案:

答案 0 :(得分:0)

事实证明,我忘记将{get; set; }放在Id属性后面。这是更正后的模型:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Threading.Tasks;

namespace APD_Remastered_Ideas.Models
{
    public class TestModel
    {
        [Key]
        public int Id { get; set; }
        public string address { get; set; }
    }
}