代码之家  ›  专栏  ›  技术社区  ›  johnny 5

使用代码第一个ef core[duplicate]时对象名无效

  •  0
  • johnny 5  · 技术社区  · 7 年前

    here 实体框架现在起作用了 Seed() 方法也有效。

    但是当我试图像这样访问数据库时:

        public User FindUserByID(int id)
        {
            return (from item in this.Users
                    where item.ID == id
                    select item).SingleOrDefault();
        }
      .............................................................................
        // GET: /Main/
    
        public ActionResult Index(int? id)
        {
            var db = UserDataBaseDB.Create();
    
            if (!id.HasValue)
                id = 0;
    
            return View(db.FindUserByID(id.Value));
        }
    

    return (from item in this.Users 声明:

    Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.BaseCs'.

    return this.Users.ElementAt(id); 但是它抛出了这个异常。

    LINQ to Entities does not recognize the method 'MySiteCreator.Models.User ElementAt[User](System.Linq.IQueryable 1个[MySiteCreator.Models.User],Int32)方法,并且此方法无法转换为存储表达式`

    有人能帮我吗?

    0 回复  |  直到 8 年前
        1
  •  67
  •   Jeff Ogata    14 年前

    此错误表示EF正在将LINQ转换为使用名为 dbo.BaseCs ,数据库中不存在。

    检查数据库并验证该表是否存在,或者应该使用其他表名。此外,如果你可以发布一个链接到你正在学习的教程,它将有助于你跟随你正在做的事情。

        2
  •  22
  •   acarlon    13 年前

    为模型提供表属性:

    [Table("webpages_OAuthMembership")]
    public class OAuthMembership
    

    或者通过重写modelcreating上的DBContext来提供映射:

    class webpages_OAuthMembershipEntities : DbContext
    {
        protected override void OnModelCreating( DbModelBuilder modelBuilder )
        {
            var config = modelBuilder.Entity<OAuthMembership>();
            config.ToTable( "webpages_OAuthMembership" );            
        }
        public DbSet<OAuthMembership> OAuthMemberships { get; set; }        
    }
    
        3
  •  12
  •   sfs    12 年前

    如果您提供这样的映射:

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ClassificationMap());
            modelBuilder.Configurations.Add(new CompanyMap());
            modelBuilder.Configurations.Add(new GroupMap());
            ....  
        }
    

    记住添加BaseCs的映射。

        4
  •  8
  •   Toffee    9 年前

    可能是关于表名复数的问题。可以使用下面的代码段关闭此约定。

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
         base.OnModelCreating(modelBuilder);
         modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
     }
    
        5
  •  6
  •   muruge    13 年前

    EF正在查找名为数据库基础. 可能是实体名称多元化的问题。看看这个 link .

    编辑:

        6
  •  2
  •   Elnoor    8 年前

    ConnectionString 检查数据库上下文文件中的DbSet集合名称。如果该表名与数据库表名不匹配,也会出现此错误。

    例如, 类别,产品

    public class ProductContext : DbContext 
    { 
        public DbSet<Category> Categories { get; set; } 
        public DbSet<Product> Products { get; set; } 
    }
    

    应与实际数据库表名匹配:

    enter image description here

        7
  •  1
  •   Carlo V. Dango    8 年前

    public class BContext : DbContext
    {
        public BContext(DbContextOptions<BContext> options) : base(options)
        {
        }
    
        public DbSet<PriorityOverride> PriorityOverrides { get; set; }
    
        protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.HasDefaultSchema("My.Schema");
    
            builder.ApplyConfiguration(new OverrideConfiguration());
        }
    }
    

    class PriorityOverrideConfiguration : IEntityTypeConfiguration<PriorityOverride>
    {
        public void Configure(EntityTypeBuilder<PriorityOverride> builder)
        {
            builder.ToTable("PriorityOverrides");
            ...
        }
    }
    
        8
  •  1
  •   ascripter    8 年前

    modelBuilder.Entity<BaseCs>().ToTable("dbo.BaseCs");
    

    尝试:

    modelBuilder.Entity<BaseCs>().ToTable("BaseCs");
    

    即使你的表名是 dbo.BaseCs

        9
  •  0
  •   jsgoupil    6 年前

    这些不是超级可见,所以你可能会搜索一段时间!

        10
  •  0
  •   Abdellah GRIB    6 年前

    我不知道是不是这样,

    如果您创建 在添加DbSet之前,sql表将有一个模型的名称,通常是单数形式,或者按照惯例,我们使用复数形式命名DbSet。

    因此,尝试验证DbSet名称是否与表同名。如果不尝试改变配置。

        11
  •  -1
  •   Icemark Muturi    8 年前

    在上下文定义中,每个上下文类仅定义两个DbSet上下文。

    推荐文章