Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/263.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC不支持每种类型的多个对象集错误_C#_Asp.net Mvc_Entity Framework - Fatal编程技术网

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

C# MVC不支持每种类型的多个对象集错误,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在尝试创建一个db上下文,并添加一个实体控制器用于自动生成 问题是,当我运行控制器url时,出现以下错误: 不支持每种类型有多个对象集。对象集“Arduinos”和“Arduinoes”都可以包含“MVC3.Models.Arduino”类型的实例 既然我指定dbset的名称为“Arduinos”,为什么会生成名称“Arduinoes” 型号: public class DBArduino:DbContext { DbSet<Arduino> Arduinos { ge

我正在尝试创建一个db上下文,并添加一个实体控制器用于自动生成

问题是,当我运行控制器url时,出现以下错误:

不支持每种类型有多个对象集。对象集“Arduinos”和“Arduinoes”都可以包含“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?
}
他从哪里得到的“Arduinoes”?即使在我重新构建解决方案并再次添加控制器之后,它仍然会得到这个名称

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

分配给自动生成的
DbSet
的“Arduinoes”名称由类中设计而来,它考虑了以“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存储库中提供的完整代码视图位于下面的“参考”部分)

因此,由于在
DbContext
类中找不到必需的
Arduinoes
属性名称,因此EF与控制器支架相关的机制添加了它,而不管是否存在引用具有不同属性名称的相同表类的其他
DbSet
属性,因此,由于多个对象集重复,引发了InvalidOperationException

如果您仍然希望通过预先分配的
DbSet
属性使用控制器支架,我建议删除自动生成的零件,然后更改此声明:

public DbSet<Arduino> Arduinos { get; set; }
公共数据库集

类似问题:


您很可能有两个名称相同的类?删除两个相同的
DbSet
s中的一个。我遵循了MSDN教程,其中说首先在上下文类中创建一个DbSet,然后根据上下文类添加控制器。
public DbSet<Arduino> Arduinos { get; set; }
public DbSet<Arduino> Arduinoes { get; set; }