【问题标题】:Query specific table in C# Visual Studio database查询 C# Visual Studio 数据库中的特定表
【发布时间】:2012-11-13 21:46:51
【问题描述】:

我是 Visual Studio MVC3 的新手,正在尝试连接到数据库。我在 web.config 文件中有我的连接字符串:

add name="con" connectionString="Data Source=190.190.200.100,1433;Network Library=DBMSSOCN;Initial Catalog=myDataBase; 用户 ID=myUsername;Password=myPassword;" providerName="System.Data.SqlClient"

但是,服务器有多个表。查询数据库时如何/在哪里指定要使用的表?

编辑:
例如,我正在查看this example。应用程序如何区分表以显示数据?当您按照链接中的示例调用return View(db.Students.ToList()) 时,应用程序如何知道要查看学生表而不是注册表?

【问题讨论】:

  • 您是指多个还是多个数据库?该表在SELECT 语句(或您的实体模型)中指定。数据库在连接字符串中指定(在您的示例中为myDatabase
  • 引用表是特定查询的一部分(SELECTINSERTUPDATEDELETE 等),而不是连接字符串的组成部分。如果您在查询或命令语句方面需要帮助,请将其包含在您的问题中。
  • 已编辑。请看上面

标签: sql-server database asp.net-mvc-3 entity-framework visual-studio-2012


【解决方案1】:

应用程序如何区分要显示的表格 数据?当您致电 return View(db.Students.ToList()) 时 链接中的示例,应用程序如何知道要查看 学生表而不是注册表?

db.Students 部分来自实体框架。

阅读您发布的链接中的“创建数据库上下文”部分。
您将在那里找到以下代码:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using ContosoUniversity.Models;
using System.Data.Entity.ModelConfiguration.Conventions;

namespace ContosoUniversity.Models
{
    public class SchoolContext : DbContext
    {
        public DbSet<Student> Students { get; set; }
        public DbSet<Enrollment> Enrollments { get; set; }
        public DbSet<Course> Courses { get; set; }

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

这设置了数据库上下文,这基本上是 Entity Framework 的“设置”,它知道它必须将哪个 C# 类映射到数据库表。

所以db.Students(根据您的问题)实际上是DbSet&lt;Student&gt;

Entity Framework 的默认约定如下所示:它尝试将类映射到同名的表。
通常,它会将Student 类映射到一个名为Students(复数形式)的表,但您可以更改/覆盖这些约定……他们在本例中也这样做了,在这一行:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

这在教程中也有说明,直接在上面的代码下。
引用教程:

此代码为每个实体集创建一个DbSet 属性。在实体中 框架术语,一个实体集通常对应于一个 数据库表,一个entity对应表中的一行。

OnModelCreating 方法中的语句防止表名 被多元化。如果您不这样做,生成的表将是 命名为 StudentsCoursesEnrollments。相反,表名 将是StudentCourseEnrollment。开发商不同意 表名是否应该是复数形式。本教程使用 单数形式,但重要的是你可以选择 通过包含或省略这行代码来选择您喜欢的任何形式。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-23
    • 1970-01-01
    • 2014-11-06
    相关资源
    最近更新 更多