AspNet EF6 - 实体类型没有定义键

时间:2017-10-18 20:23:35

标签: asp.net asp.net-mvc entity-framework asp.net-mvc-4

所以我改变了我的数据库并重新制作它们。我按照EF6教程,但在尝试创建带视图的控制器时遇到此错误。我做了一些关于错误的研究,人们说要添加数据注释,我试过[Key]但是我一直得到同样的错误。不确定我是否忘记了什么?谢谢!

  

“运行所选代码生成器时出错:'无法检索'LinkDB.Models.Identifier'的元数据。无法确定类型“LinkDB.Models.Identifier”和“LinkDB.Models.Identity”之间关联的主要结尾。此关联的主要结尾必须使用关系流畅API或数据注释进行明确配置。 / p>

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;

namespace LinksDB.Models
{
    public class Identity
    {
        [Key]
        public int ID { get; set; }

        public int IdentifierID { get; set; }
        public string contact { get; set; }
        public string contactname { get; set; }
        public string price { get; set; }

        public virtual ICollection<Link> Links { get; set; }
        public virtual Identifier Identifiers { get; set; }
        public virtual Metric Metrics { get; set; }
    }
}

 using System;
 using System.Collections.Generic;
 using System.ComponentModel.DataAnnotations;


namespace LinksDB.Models
{
    public class Identifier
    {
        [Key]
        public int ID { get; set; }
        public string domain { get; set; }

        public virtual ICollection<Link> Links { get; set; }
        public virtual Identity Identitys { get; set; }
        public virtual Metric Metrics { get; set; }

    }
}

using LinksDB.Models;
using System.Data.Entity;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace LinksDB.DAL
{
    public class LinkData : DbContext
    {

        public LinkData() : base("LinkData")
        {
        }
        public DbSet<Identifier> Identifiers { get; set; }
        public DbSet<Identity> Identitys { get; set; }
        public DbSet<Link> Links { get; set; }
        public DbSet<Metric> Metrics { get; set; }

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

1 个答案:

答案 0 :(得分:0)

好的,如果你想在Identity和Identifier之间建立1:1的关系,那么这些模型应该如下所示,其中子(Indentifier)使用IdentityId作为它的PK和FK。您也可以使用流畅的代码执行此操作。从这开始,然后添加度量和链接关系。

public class Identity
{
    [Key]
    public int ID { get; set; }

    public string contact { get; set; }
    public string contactname { get; set; }
    public string price { get; set; }

    public virtual Identifier Identifier { get; set; }
}

public class Identifier
{
    [Key, ForeignKey("Identity")]
    public int IdentityID { get; set; }

    public string domain { get; set; }

    public virtual Identity Identity { get; set; }
}

示例here