MVC不支持每种类型的多个对象集错误

问题描述:

我正在尝试创建一个数据库上下文并为自动生成添加一个实体控制器。MVC不支持每种类型的多个对象集错误

问题是,当我运行控制器网址我得到以下错误:

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

为什么,因为我指定的dbset的名称是“Arduinos”所产生的名字“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()); 
    } 
    .... 
} 

他在哪里,从获得 “Arduinoes”?即使在我重建解决方案并再次添加控制器后,它仍然得到这个名称。

应该如何调用通过添加带有实体的控制器来生成数据集的名称?

+0

你最有可能有2个班被命名的一样吗? – Webbanditten

+0

删除两个相同的DbSet中的一个。 –

+0

我遵循MSDN教程,它说,首先在上下文类中创建一个dbset,然后根据上下文class添加控制器.https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-开始/引进/创建-一个连接字符串 –

的“Arduinoes”名称指定给自动生成DbSet谈到通过设计在System.Data.Entity.Design.PluralizationServices类,它参考在“O”结尾的表的类名(除了前述声乐)加入“-es”后缀如下图所示:

因此,由于需要

[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财产使用控制器的脚手架,我建议删除自动生成的一部分,那么更改此声明:

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

遵循EF的约定:

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