对象名称无效异常指的是我没有创建的对象

本文关键字:对象 创建 无效 异常 | 更新日期: 2023-09-27 18:08:34

目前,我正试图使用EntityFramework从数据库中提取信息。因此,我已经连接到正确的数据库:

<add name="ChartConn" connectionString="Data Source=****;Initial Catalog=****;User ID=****;Password=****;" providerName="System.Data.SqlClient" />

,其中星号用该数据库的正确个人信息填充。

问题是,当我试图从这个数据库中提取信息与以下在我的控制器:

public ActionResult Index()
{
    var q = (from c in db.ChannelMaps
            select c.LABEL).ToList();
    return View(q);
}

和模型中的以下内容,CHANNELMAP:

using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Data.Entity;
using System.Linq;
using System.Web;
namespace ChartApp.Models
{
    public class CHANNELMAP
    {
        [Key]
        public int CHANNELNUM { get; set; }
        public int COLUMNID { get; set; }
        public string LABEL { get; set; }
        public string RAWUNITS { get; set; }
        public double? MULT { get; set; }
        public double? ADDER { get; set; }
        public int? DATATYPEID { get; set; }
        public int? OPCODEID { get; set; }
        public decimal? OPVALUE { get; set; }
        public int? SITEID { get; set; }
        public string DASNAME { get; set; }
    }
    public class ChannelMapContext : DbContext
    {
        public ChannelMapContext()
            : base("ChartConn")
        {
            Database.SetInitializer<Models.ChannelMapContext>(null);
        }
        public DbSet<CHANNELMAP> ChannelMaps { get; set; }
    }
}

我得到一个错误:无效的对象名称dbo.CHANNELMAPs,指向我的控制器中的linq查询的第一行(from c in db.ChannelMaps)。这很奇怪,因为我的模型的名称是CHANNELMAP,所以我不确定为什么我没有使用过的对象的无效名称会出现错误。是什么导致了这个错误?我已经尝试多次更改模型的名称,以及三次检查,以确保我的连接字符串和属性名称都相应设置。

对象名称无效异常指的是我没有创建的对象

默认情况下,EF在模型中每个实体的末尾添加一个's'(复数形式)。要删除它,只需删除约定:

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

异常详情:System.Data.SqlClient.SqlException: Invalid objectdbo名称"。CHANNELMAPs '

这个错误意味着EF正在将你的LINQ转换成一个使用数据库中不存在的表的sql语句。

检查您的数据库并验证该表是否存在,或者您应该使用不同的表名

Entity Framework按照约定假定表名是实体名的复数形式(因此错误消息引用了CHANNELMAPs)。如果您的实体实际上被称为CHANNELMAP,则为其添加Table属性。

[Table("CHANNELMAP")]
public class CHANNELMAP
    { ...
如何使用Entity Framework Code First Fluent API指定表名