尝试添加控制器,无法检索元数据,没有主键定义,即使它看起来像

时间:2015-06-04 12:49:21

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

到目前为止我发现的所有帮助都说用[Key]定义主键,它必须命名为ID或 YourClassName ID。据我所知,这是正确的格式,但我仍然收到此错误:

![无法检索'DARTPRO.Models.Members'的元数据。在模型生成期间检测到一个或多个验证错误:

DARTPRO.Models.PlayerScores :: EntityType'PlayerScores'没有定义键。定义此EntityType的键。 Players_Scores:EntityType:EntitySet'Players_Scores'基于没有定义键的tpye'PlayerScores'。1

创建这样的控制器时:

![型号类:(DARTPRO.Models)

数据上下文类:DartConnection(DARTPRO.Models)] 2

以下是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.Entity;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace DARTPRO.Models
{
    public class DartConnection : DbContext
    {
        public DbSet<Members> Member_Details { get; set;}
        public DbSet<PlayerScores> Players_Scores { get; set;}
    }

    [Table("MenmbersProfile")]
    public class Members
    {
        [Key]
        public int MembersID { get; set; }
        public string Forename { get; set; }
        public string Surname { get; set; }
        public string Nickname { get; set; }
        public string Contactnumber { get; set; }
        public string Address { get; set; }
    }

    [Table("PlayersGameDetials")]
    public class PlayerScores
    {
        [Key]
        public int PlayerScoresID { get; set; }
        public int HigestScore { get; set; }
        public double ThreeDartAverage { get; set; }
        public double OneDartAverage { get; set; }
        public int DartsThrown { get; set; }
        public int MembersID { get; set; }
    }
}

1 个答案:

答案 0 :(得分:0)

你的代码中有一些拼写错误

[表( “MenmbersProfile”)] 应该是MembersProfile吗?我<强>名词 mbers

[表( “PlayersGameDetials”)] 另一个错字?细节不是Det ia ls。

我建议手动创建与您的代码第一类匹配的数据库表,并确保没有拼写错误,并在数据库中的表上设置主键以匹配类中的[Key]属性。

我的模型中也有以下覆盖,以控制表名的复数。

此外,如果你想控制DbConext的目标,你可以添加自己的构造函数

public class DartConnection : DbContext
{
    public DartConnection()
    {
        // override the connection string
        this.Database.Connection.ConnectionString = ConfigurationManager.ConnectionStrings["MyAppSettingDB"].ConnectionString;
    }


    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
    }
}