rla*_*iga 5 c# entity-framework ef-code-first
我已经准备好我的代码第一个EF的模型,我在sql express上尝试它,它的工作原理.但我有一个问题,它将其转换为SQL服务器: 我没有权限重新创建数据库我只能将表添加到空数据库.
我已经看到了这个答案但是当我试图复制它时,我对上下文部分有一些麻烦:
public class DropCreateDatabaseTables : IDatabaseInitializer<Context> {
#region IDatabaseInitializer<Context> Members
public void InitializeDatabase(Context context)
Run Code Online (Sandbox Code Playgroud)
我已经将引用放到System.Data.Entity但不起作用,并且Context类不是在System.Runtime.Remoting.Contexts上引用的.
代码有问题吗?或者使用EF的最后一个工具是更好的解决方案?
编辑:
最后是:
的DbContext:
public class PeopleContext: DbContext
{
public DbSet<Person> People { get; set; }
public DbSet<Adress> Adresses{ get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
// Add Entity type configuration classes
modelBuilder.Configurations.Add(new PersonConfiguration());
modelBuilder.Configurations.Add(new AdressConfiguration());
}
}
Run Code Online (Sandbox Code Playgroud)
初始化:
public class DropCreateDatabaseTables : IDatabaseInitializer<PeopleContext>
{
public void InitializeDatabase(PeopleContextContext)
{
bool dbExists;
using (new TransactionScope(TransactionScopeOption.Suppress))
{
dbExists = Context.Database.Exists();
}
if (dbExists)
{
// remove all tables
Context.Database.ExecuteSqlCommand("EXEC sp_MSForEachTable 'ALTER TABLE ? NOCHECK CONSTRAINT ALL'");
Context.Database.ExecuteSqlCommand("EXEC sp_MSforeachtable @command1 = \"DROP TABLE ?\"");
// create all tables
var dbCreationScript = ((IObjectContextAdapter)Context).ObjectContext.CreateDatabaseScript();
Context.Database.ExecuteSqlCommand(dbCreationScript);
Context.SaveChanges();
}
else
{
throw new ApplicationException("No database instance");
}
}
}
Run Code Online (Sandbox Code Playgroud)
呼叫:
class Program
{
static void Main(string[] args)
{
var person= new Person
{
Identifier= "John Doe"
};
Database.SetInitializer(new DropCreateDatabaseTables());
using (var context = new PeopleContext())
{
context.People.Add(person);
context.SaveChanges();
}
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢Lukas Kabrt!
Context示例中的类应该是您的类DbContext,即您指定 s 的类DbSet<>。
例子:
DbContext 类
public class DataContext : DbContext {
public DbSet<Customer> Customers { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
数据库初始化器
public class DropCreateDatabaseTables : IDatabaseInitializer<DataContext> {
...
}
Run Code Online (Sandbox Code Playgroud)