有没有办法配置EF创建数据库时要使用的归类?
或者在创建数据库之后但是在创建表之前是否有某种钩子来设置排序规则?
答案 0 :(得分:2)
我自己创建了数据库来解决这个问题。然后基类将表创建为空DB:
public class MyInitializer : CreateDatabaseIfNotExists<MasterDataModel>
{
public override void InitializeDatabase(MasterDataModel context)
{
if(!context.Database.Exists())
{
using (SqlConnection connection = new SqlConnection("YourConnectionString"))
{
connection.Open();
using(SqlCommand command = new SqlCommand(string.Format("CREATE DATABASE {0} COLLATE Latin1_General_CI_AS", "NameOfDatabase"), connection))
{
command.ExecuteNonQuery();
}
}
SqlConnection.ClearAllPools();
}
base.InitializeDatabase(context);
}
}
答案 1 :(得分:1)
可以通过打开与数据库的专用连接并通过它执行alter sql command
来解决此问题。
注意我们如何使用从框架传递的连接字符串来打开新连接。 感谢@ huer12,因为我使用了他的代码。
public class DBInitializer<T > : CreateDatabaseIfNotExists<T> where T : DbContext
{
void SetDatabaseCollation(DbContext context)
{
using (SqlConnection connection = new SqlConnection(context.Database.Connection.ConnectionString))
{
connection.Open();
using (SqlCommand command = new SqlCommand(string.Format("ALTER DATABASE [{0}] COLLATE Latin1_General_CI_AS", context.Database.Connection.Database), connection))
{
command.ExecuteNonQuery();
}
SqlConnection.ClearAllPools();
connection.Close();
}
}
protected override void Seed(T context)
{
SetDatabaseCollation(context);
}
}
public class MyDbContext : MyDbContext
{
public MyDbContext() : base("ConnectionString", throwIfV1Schema: false)
{
Database.SetInitializer(new DBInitializer<MyDbContext>());
if(!Database.Exists())
{
Database.Initialize(true);
}
}
}