【发布时间】:2018-03-11 12:43:33
【问题描述】:
所以我尝试先使用 EF 代码在 Azure 上部署数据库。我有一个模型:
public class User
{
[Key]
public int PersonID { get; set; }
[Required(ErrorMessage = "A first name is required.")]
[StringLength(20, MinimumLength = 2, ErrorMessage = "Your firstname needs to be atleast 2 letters long")]
[RegularExpression(@"^[a-zA-Z]*$", ErrorMessage = "Your firstname can only contain letters")]
[Display(Name = "First Name:")]
public string FirstName { get; set; }
}
数据上下文类:
public class DataContext : DbContext
{
public DataContext() : base("DataContext")
{
}
public DbSet<User> User { get; set; }
}
DataContextInitalizer 类:
public class DataContextInitializer : DropCreateDatabaseIfModelChanges<DataContext>
{
}
在 global.asax 文件中初始化数据上下文:
Database.SetInitializer(new DataContextInitializer());
最后是web.config中连接数据库的字符串:
<connectionStrings>
<add name="DataContext" connectionString="Data Source=tcp:*.database.windows.net,1433;Initial Catalog=TestApi20180311012458_db;User ID=usernamehere;Password=passwordhere" providerName="System.Data.SqlClient" />
构建解决方案时不会创建表。我不知道我错过了哪里。你能看出什么问题吗?
【问题讨论】:
-
构建解决方案时,不会创建任何数据库,因为没有运行 EF 代码。数据库初始化程序将在模型构建器之后运行,一旦第一次访问数据库(即第一次以它为目标的查询)就会执行。但是,我不知道如果将构造函数设置为“只是一个新的”,将使用什么初始化程序。通常EF在初始化时会重新创建数据库,使用CreateDatabaseIfNotExists初始化策略,但是使用一个新的可能和null策略一样,永远不会为你创建数据库。
-
@DevilSuichiro 我现在在初始化程序的种子方法中有一些 EF 代码,但数据库中仍然没有创建表。不确定您所说的“未创建数据库”是什么意思。我确实有一个数据库,但没有从实体到表的映射。
-
你得到的错误是什么?
-
@DevilSuichiro no build or runtime error,错误是没有生成表。由于我有一个用户数据库集,我应该有一个用户表,但我没有,我不知道为什么。
标签: entity-framework azure frameworks entity connection-string