2017-04-09 7 views
0

DBコンテキストを作成し、自動生成用のエンティティコントローラを追加しようとしています。私はdbsetの名前は「Arduinos」であることを指定するため、MVCタイプごとに複数のオブジェクトセットがサポートされていないエラー

Multiple object sets per type are not supported. The object sets 'Arduinos' and 'Arduinoes' can both contain instances of type 'MVC3.Models.Arduino'

はなぜ名前「Arduinoes」が生成されます。

問題は、私は、コントローラのURLを実行したときに、私は次のエラーを取得するです。

モデル:彼はから "Arduinoes" を取得ん

public class DBArduino:DbContext 
{ 
    DbSet<Arduino> Arduinos { get; set; } 
    public System.Data.Entity.DbSet<MVC3.Models.Arduino> Arduinoes { get; set;} //this one is autogenerated after adding the "ArduinoController" why does it change its name? 
} 

コントローラ

public class ArduinoController : Controller 
{ 
    private DBArduino db = new DBArduino(); 
    // GET: Arduino 
    public ActionResult Index() 
    { 
     return View(db.Arduinoes.ToList()); 
    } 
    .... 
} 

?ソリューションを再構築してコントローラをもう一度追加した後でも、この名前は引き続き取得されます。

エンティティを持つコントローラを追加することによって生成されるデータセットの名前は、どのように呼び出す必要がありますか?自動生成DbSetに割り当て

+0

あなたが最も可能性が高いと同じ名前が付けられ2クラスがありますか? – Webbanditten

+0

2つの同一の 'DbSet'のうちの1つを削除します。 –

+0

私はMSDNのチュートリアルに続いて、最初にコンテキストクラスでdbsetを作成し、次にコンテキストに基づいてコントローラを追加しますclass.https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-開始/導入/作成 - 接続文字列 –

答えて

0

Arduinoes」名(先行ボーカルを除いて)「O」で終わるテーブルクラス名として「-es」サフィックスが付加されたと見なしSystem.Data.Entity.Design.PluralizationServicesクラスに設計することによって付属します以下に示す:必要なので、

したがって

[System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Globalization", "CA1308:NormalizeStringsToUppercase")] 
private string InternalPluralize(string word) 
{ 
    // other stuff 
    if (suffixWord.EndsWith("o", true, this.Culture) || suffixWord.EndsWith("s", true, this.Culture)) 
    { 
     return prefixWord + suffixWord + "es"; 
    } 
    // other stuff 
} 

(以下 "リファレンス" 部分上のGitHubリポジトリの内部に設けられた完全なコードビュー) ArduinoesあなたのDbContextクラスにプロパティ名が見つからない場合、コントローラーの足場に関連するEFのメカニズムは、異なるプロパティ名を持つ同じテーブルクラスを参照する他のDbSetプロパティの存在にかかわらず追加したため、複数のオブジェクトセットの重複のためにInvalidOperationExceptionを投げます。

それでも事前に割り当てられたDbSetプロパティによって、コントローラ足場を使用したい場合は、私はこの宣言に変更後、自動生成された部分を除去することをお勧めします:EFの規則に従うことを

public DbSet<Arduino> Arduinos { get; set; } 

を:

public DbSet<Arduino> Arduinoes { get; set; } 

を削除するか、または手動で削除してDbSetと宣言し、自動生成されたものを使用します。

NB

:異なるDbSetプロパティで同じテーブル名を参照する重複表現がサポートされていない、ので、あなたは、コントローラの足場とDbSetプロパティ名を定義するときEF複数形の規則に従う必要があります。

参考:

System.Data.Entity.Design.PluralizationServices.EnglishPluralizationService Reference Source

同様の問題:

Multiple object sets of the same type

ASP.NET Identity - Multiple object sets per type are not supported

関連する問題