gpt4 book ai didi

c# - MVC 4 Entity Framework 不从 SQL Server 中获取数据库

转载 作者:太空宇宙 更新时间:2023-11-03 10:58:16 24 4
gpt4 key购买 nike

我正在运行带有数据库和 SQL 身份验证的 SQL Server Express 2008 R2。我已将数据库连接添加到我的服务器资源管理器并将连接字符串添加到 web.config 文件。当我调试应用程序时,它似乎正在创建一个默认数据库,例如tutorial.MVC 等,而不是获取我在创建应用程序之前创建的数据库。

我还收到编译错误:{"Invalid object name 'dbo.Products'."} 应该发生,因为 SQL 是:

{SELECT 
[Extent1].[ProductID] AS [ProductID],
[Extent1].[ProductName] AS [ProductName],
[Extent1].[ProductPrice] AS [ProductPrice]
FROM [dbo].[Products] AS [Extent1]}

不存在名为 products 的表。这一定是由 Entity Framework 数据库生成的。我删除了它,因为 Products 模型类最初是 Products,其中数据库表被称为 Product(人为错误),因此无法更新 SQL。本质上我只是想让 Controller 映射到正确的数据库。我怀疑它没有从 connectionString 中获取数据库。虽然连接字符串在调试时被 StoreContext 拾取。似乎没有在拾取数据库。但可以看出为什么网页配置

<configuration>
<connectionStrings>
<add
name="StoreContext"
connectionString="Data Source=ADMIN-PC\SQLEXPRESS;Initial Catalog=test;Integrated Security=True;User ID=Login;Password=***********"
providerName="System.Data.SqlClient"
/>
</connectionStrings>

global.asax

 public class MvcApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
Database.SetInitializer<Tutorial.Models.StoreContext>(null);
AreaRegistration.RegisterAllAreas();

WebApiConfig.Register(GlobalConfiguration.Configuration);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
}
}

产品总监

 public class ProductController : Controller
{

StoreContext hello = new StoreContext();
//
// GET: /Product/
public ActionResult Index()
{

var product = hello.Product.ToList();
return View(product);

}

}

产品型号:

{
[Table("Product")]
public class Product
{

public int ProductID { get; set; }
public string ProductName { get; set; }
public double ProductPrice { get; set; }
}
}

商店上下文:

public class StoreContext: DbContext
{
public DbSet<Product> Product { get; set; }
}

最佳答案

您是否在您的项目中设置了正确的DatabaseInitializer

IDatabaseInitializer 包含 4 个您可以使用的派生类型:CreateDatabaseIfNotExistsDropCreateDatabaseAlwaysDropCreateDatabaseIfModelChanges迁移数据库到最新版本

选择适合您需求的初始化器并从中派生。

接下来,在上下文的构造函数中,设置初始值设定项:

public Context() : base("ConnectionString")
{
Database.SetInitializer(new MigrationsDatabaseInitializer());
}

MigrationsDatabaseInitializer 是我从 MigrateDatabaseToLatestVersion 派生的类。

也许您的项目总是一遍又一遍地重写数据库。

您可以使用约定禁用复数。覆盖 OnModelCreation 并删除复数约定:

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

希望对您有所帮助! :)

关于c# - MVC 4 Entity Framework 不从 SQL Server 中获取数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18618526/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com