小编Mat*_*att的帖子

如何创建初始化程序来创建和迁移mysql数据库?

我一直在学习如何使用EF一个星期左右,我一直坚持创建/更新我的数据库的问题.如果不存在,我可以创建一个初始化器来创建数据库:

static class Program
{
    static void Main()
    {
        Database.SetInitializer<GumpDatabase>(new GumpDatabaseInitializer());
....

class GumpDatabaseInitializer : CreateDatabaseIfNotExists<GumpDatabase>
{
    public GumpDatabaseInitializer()
    {
    }
    protected override void Seed(GumpDatabase context)
    {
        context.Database.ExecuteSqlCommand("CREATE UNIQUE INDEX Name ON Stations (Name)");
        // Other stuff
    }
}
Run Code Online (Sandbox Code Playgroud)

或者我可以创建配置来迁移数据库

static class Program
{
    static void Main()
    {
        Database.SetInitializer<GumpDatabase>(new MigrateDatabaseToLatestVersion<GumpDatabase, Configuration>());
....

internal sealed class Configuration : DbMigrationsConfiguration<GumpDatabase>
{
    public Configuration()
    {
        AutomaticMigrationsEnabled = true;
        SetSqlGenerator("MySql.Data.MySqlClient", new MySql.Data.Entity.MySqlMigrationSqlGenerator()); 
    }

    protected override void Seed(GumpDatabase context)
    {

    }
Run Code Online (Sandbox Code Playgroud)

每个都正常工作,但我还没有想出办法做到这两点.我可以通过更改SetInitializer调用在两个初始化程序之间切换,但是如果我想创建数据库,如果它不存在,并且如果它是我该怎么做的话还要迁移它?我需要创建自定义初始化程序吗?

谢谢

根据NSGaga答案编辑

class …
Run Code Online (Sandbox Code Playgroud)

c# mysql migration initializer entity-framework-4.3

14
推荐指数
1
解决办法
1万
查看次数

从CakePHP 2.1.2控制台Shell创建完整URL

我试图通过控制台shell(最终通过cron作业)从CakePHP 2.1.2发送电子邮件.我发送的视图是一个日历,其中包含指向应用程序网页的链接.我发现的问题是网址没有包含正确的路径,而且我读到的是因为我使用控制台没有请求对象.例如,如果我在浏览器中创建视图,我会得到如下链接:

http://localhost/ReportMonitor/scheduledReports/index/show_date:2012-06-10/result:GOOD
Run Code Online (Sandbox Code Playgroud)

但在使用相同代码的电子邮件中,我得到了这个:

http://localhost/scheduledReports/index/show_date:2012-06-10/result:GOOD
Run Code Online (Sandbox Code Playgroud)

这很近,但没有雪茄.

我一直试图找到我可以设置的全局,只是硬编码app子目录,但还没有找到任何有用的东西.链接由以下代码生成:

$newUrl = array();
$newUrl['controller'] = 'scheduledReports';
$newUrl['action'] = 'index';
$newUrl['url'] = array();

foreach ($data as $key => $value) {
  $newUrl['show_date'] = "$year-$month-$key";
  $newUrl['result'] = 'GOOD';
  $data[$key]['num_complete'] = $this->Html->link(__('Complete: ') . $value['num_complete'], Router::reverse($newUrl, true), array('class' => 'green'));
Run Code Online (Sandbox Code Playgroud)

我认为这是一个常见的功能(在控制台生成的电子邮件中发送有效的URL),但我无法弄明白.

谢谢

url console cakephp

5
推荐指数
1
解决办法
3231
查看次数

如何从C#Entity Framework Code First Model获取mysql char列类型

我刚刚创建了一个实体框架代码优先模型(我已经编写了其他C#程序,但没有编写实体框架).我创建了一个这样的模型:

class Preferences
{
    [Key]
    public string StationName { get; set; }
    [MaxLength(30)]
    public string MainDatabase { get; set; }
    [MaxLength(30)]
    public string DefaultSequence { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后有一个小程序来添加记录

var newPrefs = new Preferences
{
    StationName = "MATT",
    DefaultSequence = "NONE",
    MainDatabase = "NONE"
};
Preferences prefs = foo.Preferences.Add(newPrefs);
Run Code Online (Sandbox Code Playgroud)

然后尝试创建数据库,并在添加带错误的主键时失败

"BLOB/TEXT column 'StationName' used in key specification without a key length"
Run Code Online (Sandbox Code Playgroud)

因为它使用数据类型"mediumtext"而不是CHAR或VARCHAR而MySQL不能将该类型用于键.

是否有一种方法仍然或多或少与数据库无关,它将告诉MySQL使用键列的首选类型?或者我只需要放弃并制作整数键?

我也尝试过像这样的设计变化,但没有任何效果.

class Preferences
{
    [Key,DataType("CHAR"),StringLength(30)]
    public string StationName { get; set; }
    [MaxLength(30)]
    public string MainDatabase …
Run Code Online (Sandbox Code Playgroud)

c# mysql key entity-framework-4

2
推荐指数
1
解决办法
2404
查看次数