【问题标题】:MVC Code First Issue getting Data from Remote SQL Server从远程 SQL Server 获取数据的 MVC 代码优先问题
【发布时间】:2014-04-15 03:22:13
【问题描述】:

我的代码运行没有任何错误,但它似乎没有从我的 SQL Server 中提取任何数据。调试时,我得到下面的查询字符串。据我了解,它应该从表中选择所有...如果我错了,请告诉我我是 MVC 新手,感谢您的帮助

连接字符串

<add name="RegionalSalesManConnection" 
     providerName="System.Data.SqlClient" 
     connectionString="Server=01DEV\SQLDEV01;Database=Caplugs_Nav_Data;Trusted_Connection=Yes" />

RegionalSalesManConnection.cs:

public class RegionalSalesManConnection : DbContext
{
    public RegionalSalesManConnection() : base("RegionalSalesManConnection") { }

    public DbSet<RegionalSalesManagers> RegionalManagers { get; set; }
}

RegionalSalesManagers.cs:

public class RegionalSalesManagers
{
    [Key]
    public string   Code { get; set; }
    public string Name { get; set; }
}

Index.cshtml:

@model IEnumerable<MvcMobile.Models.RegionalSalesManagers>

<ul data-role="listview" data-filter="true">
    @foreach(var item in Model) {
        <li>@item.Code, @item.Name</li>      
    }
</ul>

HomeController.cs:

private RegionalSalesManConnection db;

  public HomeController()
  {
     db = new RegionalSalesManConnection();
  }

  public ViewResult Index() {

  ViewBag.NumSessions = Sessions.All.Count;
  var model = db.RegionalManagers.ToList();

     return View(model);
 }

【问题讨论】:

  • 您确定模型中的名称字段仅包含一个字符吗?
  • 啊,我没注意到,谢谢,但还是同样的问题

标签: c# sql-server asp.net-mvc ef-code-first connection-string


【解决方案1】:

当您使用 Code First 时,您是否会在每次加载时删除并重新创建数据库?如果是这样,您是否将任何数据播种到相关表中?

编辑:播种数据

下面是一个用于播种数据的数据库初始化器类的示例:

public class DatabaseInitializer : DropCreateDatabaseAlways<NameOfContext>
{
    protected override void Seed(NameOfContext context)
    {
        SeedTestData(context);
        base.Seed(context);
    }

    private static void SeedTestData(NameOfContext context)
    {
        var item = new Item
        {
            Id = 1
        }
        context.DatabaseObjectBeingAddedTo.Add(item);
    }
}

然后在您的 global.asax 文件中将以下内容添加到您的 Application_Start() 方法中:

Database.SetInitializer(new DatabaseInitializer());

第二次更新,这里是你如何声明你的上下文(通过它的 name 属性链接到你的 web.config 中的数据库连接)和一个实体的配置(在这种情况下是 RegionalSalesManager)

上下文创建:

using Data.EntityConfigurations;
using Domain.Models;
using System.Data.Entity;

namespace Data.Contexts
{
    public class ApplicationContext : DbContext
    {
        /// <summary>
        /// Constructor
        /// </summary>
        public ApplicationContext()
            : base("ConnectionStringName")
        { }

        public DbSet<RegionalSalesManager> RegionalSalesManagers { get; set; }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new RegionalSalesManagerConfiguration());
            base.OnModelCreating(modelBuilder);
        }
    }
}

实体配置:

using Domain.Models;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity.ModelConfiguration;

namespace Data.EntityConfigurations
{
    public class RegionalSalesManagerConfiguration : EntityTypeConfiguration<RegionalSalesManager>
    {
        public RegionalSalesManagerConfiguration()
        {
            //Table
            ToTable("RegionalSalesManagers");

            //Primary key
            HasKey(e => e.Id);

            //Properties
            Property(e => e.Id).HasColumnName("RegionalSalesManagerId").HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity);
        }
    }
}

【讨论】:

  • 因此,一旦应用程序运行,您就可以使用 SQL Server Management Studio 查看相关表中的现有数据并且它是否存在?
  • 不,它不会出现。我认为我的问题是配置文件中从未填充过 db(对于 ef 来说是新的,所以我刚刚通过教程发现了这一点)我仍在试图弄清楚如何填充它
  • 我已经添加了一个如何在我的答案中播种数据的示例,如果有意义,请告诉我。
  • 我收到错误“没有从 '...RegionalSalesManagers' 到 'System.Data.Entity.DbContext' 的隐式引用转换”此外,目前还没有来自什么的数据库(在 App_Data 中)我读到这应该是在我运行程序时自动创建的。基本上我现在想要完成的是从远程 SQL 服务器获取我的表并将其显示在网页上。
  • 我再次更新了我的答案,以展示您如何在 web.config 中创建链接到数据库连接的上下文,然后通过配置文件将实体配置到数据库表中。在这种情况下,它有一个列,称为 RegionSalesManagerId 的主键映射到 RegionSalesManager 类的 Id 属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多