Entity Framework代码第一次连接
Entity Framework Code First connection
我在使用 Code First 方法连接到 Entity Framework6 中的数据库时遇到了一些问题。
我没有连接到在 App_Data 文件夹中创建的本地数据库,而是将连接字符串设置为指向 SQL 服务器中的空数据库(无表)。
这是我的连接字符串:
<add name="LiquorContext" connectionString="Data Source=.; Initial Catalog=MVC_Code_First;User ID=sa; Password=*******;" providerName="System.Data.SqlClient" />
每当在我的 ViewModel 中调用此行时,我都会收到“System.ArgumentNullException:值不能为空。
参数名称:来源”错误:
var users = context.Users.ToList();
这可能是我的 Seed 方法没有被调用,因为我在那里放置了一个断点,但从未到达?
这是我的上下文 class:
public class LiquorContext : DbContext
{
public LiquorContext()
: base("LiquorContext")
{
}
public DbSet<ExampleUser> Users;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
}
}
这是我的 ContextInitializer:
public class LiquorContextInitializer : DropCreateDatabaseIfModelChanges<LiquorContext>
{
protected override void Seed(LiquorContext context)
{
var users = new List<ExampleUser>()
{
new ExampleUser { Name="a", Surname="b"},
new ExampleUser { Name="c", Surname="d"},
new ExampleUser { Name="e", Surname="f"},
new ExampleUser { Name="g", Surname="h"}
};
foreach (var user in users)
{
context.Users.Add(user);
}
context.SaveChanges();
}
}
这里我调用了Global.asax文件中的Initializer:
protected void Application_Start()
{
Database.SetInitializer<LiquorContext>(new LiquorContextInitializer());
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
如有任何帮助,我们将不胜感激。
谢谢
没有更多信息很难说。您是否在上下文的构造函数中设置了数据库初始化程序?这可能有帮助:
http://www.codeproject.com/Articles/794187/Various-Strategies-to-Initialize-Database-in-Entit
在我的 LiquorContext class 中,我有如下 DbSet<>:
public DbSet<ExampleUser> Users;
通过添加 { get;放; } 如下,有效:
public DbSet<ExampleUser> Users { get; set; }
我在使用 Code First 方法连接到 Entity Framework6 中的数据库时遇到了一些问题。
我没有连接到在 App_Data 文件夹中创建的本地数据库,而是将连接字符串设置为指向 SQL 服务器中的空数据库(无表)。
这是我的连接字符串:
<add name="LiquorContext" connectionString="Data Source=.; Initial Catalog=MVC_Code_First;User ID=sa; Password=*******;" providerName="System.Data.SqlClient" />
每当在我的 ViewModel 中调用此行时,我都会收到“System.ArgumentNullException:值不能为空。 参数名称:来源”错误:
var users = context.Users.ToList();
这可能是我的 Seed 方法没有被调用,因为我在那里放置了一个断点,但从未到达?
这是我的上下文 class:
public class LiquorContext : DbContext
{
public LiquorContext()
: base("LiquorContext")
{
}
public DbSet<ExampleUser> Users;
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<System.Data.Entity.ModelConfiguration.Conventions.PluralizingTableNameConvention>();
}
}
这是我的 ContextInitializer:
public class LiquorContextInitializer : DropCreateDatabaseIfModelChanges<LiquorContext>
{
protected override void Seed(LiquorContext context)
{
var users = new List<ExampleUser>()
{
new ExampleUser { Name="a", Surname="b"},
new ExampleUser { Name="c", Surname="d"},
new ExampleUser { Name="e", Surname="f"},
new ExampleUser { Name="g", Surname="h"}
};
foreach (var user in users)
{
context.Users.Add(user);
}
context.SaveChanges();
}
}
这里我调用了Global.asax文件中的Initializer:
protected void Application_Start()
{
Database.SetInitializer<LiquorContext>(new LiquorContextInitializer());
AreaRegistration.RegisterAllAreas();
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
如有任何帮助,我们将不胜感激。 谢谢
没有更多信息很难说。您是否在上下文的构造函数中设置了数据库初始化程序?这可能有帮助:
http://www.codeproject.com/Articles/794187/Various-Strategies-to-Initialize-Database-in-Entit
在我的 LiquorContext class 中,我有如下 DbSet<>:
public DbSet<ExampleUser> Users;
通过添加 { get;放; } 如下,有效:
public DbSet<ExampleUser> Users { get; set; }