2017-10-18 19 views
0

データベースを変更して再作成しました。私はEF6チュートリアルに従いましたが、ビューを持つコントローラを作成しようとしているときにこのエラーが発生しました。私はそのエラーに関するいくつかの調査を行い、人々はデータ注釈を追加すると言って、[Key]を試みましたが、私は同じエラーが発生し続けます。私は何かを忘れてしまったかどうか分からない?ありがとう!AspNet EF6 - エンティティタイプにキーが定義されていません

"選択されたコードジェネレータを実行中にエラーが発生しました: '' LinkDB.Models.Identifier 'のメタデータを取得できませんでした。 'LinkDB.Models.Identifier'と 'LinkDB.Models.Identity'の間のアソシエーションの主な終点を判断できません。このアソシエーションの主な終点は、流動的なAPIまたはデータアノテーションのどちらかの関係を使用して明示的に設定する必要があります。

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>(); 
     } 
    } 
} 
+0

! – liamcook

+0

あなたは本当に[キー]私を必要としませんあなたがしているあなたのキー 'ID'や 'クラス+ ID 'を呼び出すという慣習に従います。問題は他のところにある。行は 'public virtual Identity Identity {get;}ですか?セット; } '(IdentifierIdと自動的にペアになっています)FK? –

+0

@SteveGreene私はそれも独自の鍵としてMetricIDとIdentityIDを持っていたと思っていました。私のデータベースには名前がつけられていないことが認められました。しかし、各データベースにidentifierIDを追加して、各データベースのデータを照合することができます。他にどこに問題があるのだろうか?私は全体のビルドを行った!感謝 – liamcook

答えて

0

OK、あなたは1たい場合:アイデンティティと識別子の間に1の関係をこれらのモデルは、それの両方がPKとFKだとして、子(Indentifier)がIdentityIdを使用する場所以下のようになります。あなたはまた、これを行うことができます。流暢なコードでただ、おかげでそれを追加した@kirk。これで起動し、あなたのメトリックに追加し、関係をリンクします。

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

関連する問題