实体类型要求使用键属性定义主键错误

时间:2018-04-17 22:41:01

标签: c# entity-framework visual-studio-2017 entity-framework-core primary-key

设置概念证明应用程序。我已在VS2017中的ApplicationDbContext模板中添加了Transaction课程和Web Application (Model-View-Controller)课程。

当我尝试运行Add-Migration AddsTransactions时,我收到此错误:

  

实体类型“交易”需要定义主键。

这是我的ApplicationDbContext

using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Transactions;

namespace WebApplication4.Data
{
    public class ApplicationDbContext : DbContext
    {
        public ApplicationDbContext(DbContextOptions<ApplicationDbContext> options) : base(options)
        {
        }

        public DbSet<Transaction> Transactions { get; set; }
    }
}

我的Transaction模特课:

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

namespace WebApplication4.Models
{
    public class Transaction
    {
        [Key]
        public int Id { get; set; }
        public DateTimeOffset TransactionDate { get; set; }
        public decimal TransactionAmount { get; set; }

        public bool OnHold
        {
            get { return this.FundingStatus == FundingStatus.Held; }
            set { this.FundingStatus = FundingStatus.Held; }
        }

        public FundingStatus FundingStatus { get; set; }
    }

    public enum FundingStatus
    {
        New,
        Submitted,
        Funded,
        Held
    }
}

根据我的阅读,实体框架核心应该看到我有一个名为Id的属性并将其作为我的主键,如果出于某种奇怪的原因它没有这样做,[Key]属性应该强制它成为主键。

不幸的是,现实似乎与我不同意。有什么想法吗?

1 个答案:

答案 0 :(得分:2)

今天的教训是“不要只是点击Intellisense给你的第一件事,特别是当使用含糊的类名时”

原来我不想using System.Transactions;,我希望using WebApplication4.Models文件中有ApplicationDbContext