Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# EF5代码优先:检测它是否创建了数据库,以便运行ALTER语句_C#_.net_Sql_Entity Framework - Fatal编程技术网

C# EF5代码优先:检测它是否创建了数据库,以便运行ALTER语句

C# EF5代码优先:检测它是否创建了数据库,以便运行ALTER语句,c#,.net,sql,entity-framework,C#,.net,Sql,Entity Framework,我是实体框架5的新手。我们的团队正在使用code-First工作流 在我开始我的主要问题之前,让我先向您展示一下我的尝试(一直以来的终极评论:D) 我的问题是: 实体框架没有任何配置或数据注释来设置字段唯一性,这是对的吗 是否有一种方法可以在运行时检测或知道EF是否创建了数据库,以便我可以将此语句if(_context.database.CreateIfNotExists())移动或隐藏到可以重写的可用方法的某个位置 我真正想要的是从using语句中删除if(_context.Database.

我是实体框架5的新手。我们的团队正在使用
code-First
工作流

在我开始我的主要问题之前,让我先向您展示一下我的尝试(一直以来的终极评论
:D

我的问题是:

  • 实体框架没有任何配置或数据注释来设置字段唯一性,这是对的吗
  • 是否有一种方法可以在运行时检测或知道EF是否创建了数据库,以便我可以将此语句
    if(_context.database.CreateIfNotExists())
    移动或隐藏到可以重写的可用方法的某个位置 我真正想要的是从using语句中删除
    if(_context.Database.CreateIfNotExists())
    ,并将其放在其他地方或
    MyDBContext
    中,这样我的代码看起来就像这样

    using (MyDBContext _context = new MyDBContext(connString))
    {
        Account _acc = new Account()
        // ...Account properties ...
    
        _context.Account.Add(_acc);
        _context.SaveChanges();
    }
    
    谢谢。

    您应该看一看数据运动/自定义SQL和更详细的部分-这可能是实现所需结果的方法。您的迁移类可以如下所示:

    public partial class AddUniqueConstrains : DbMigration
    {
        public override void Up()
        {
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_AccountNumber UNIQUE(AccountNumber)");
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_GUID UNIQUE(GUID)");
        }
    
        public override void Down()
        {
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_AccountNumber UNIQUE");
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_GUID");
        }
    }
    
    您还可以探索此问题的答案中描述的其他选项:

    您应该看一看,更具体的是数据运动/Custom SQL和更高的部分-这可能是实现所需结果的方法。您的迁移类可以如下所示:

    public partial class AddUniqueConstrains : DbMigration
    {
        public override void Up()
        {
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_AccountNumber UNIQUE(AccountNumber)");
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_GUID UNIQUE(GUID)");
        }
    
        public override void Down()
        {
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_AccountNumber UNIQUE");
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_GUID");
        }
    }
    

    您还可以探索此问题的答案中描述的其他选项:

    如果您不使用(或不能使用)EF迁移,您可以使用中提到的自定义初始值设定项。自定义初始值设定项将在创建数据库后执行
    Seed
    方法=仅在数据库不存在时执行一次。如果您需要以增量方式开发数据库初始值设定项本身,则该初始值设定项对您没有帮助(这就是迁移的目的)。

    如果您不使用(或不能使用)EF迁移,则可以使用中提到的自定义初始值设定项。自定义初始值设定项将在创建数据库后执行
    Seed
    方法=仅在数据库不存在时执行一次。如果您需要以增量方式开发数据库初始值设定项本身,它将不会对您有所帮助(这就是迁移的目的)。

    如果您不使用EF迁移(您可以定义唯一索引),您可以使用自定义。如果您不使用EF迁移(您可以定义唯一索引),您可以使用自定义。谢谢您的回答,但现在不是使用迁移的时候。我正在慢慢地对这些事情采取措施。但是老实说,这是一个很好的答案(代码:)+1。谢谢你的回答,但现在不是使用迁移的时候。我正在慢慢地对这些事情采取措施。但老实说,这是一个很好的答案(代码:)+1。现在不是我使用迁移的时候。正如我在聊天中提到的,我正在慢慢理解这一点,很快就会迁移到EF迁移。你的答案正是我想要的。谢谢。现在不是我使用迁移的时候。正如我在聊天中提到的,我正在慢慢理解这一点,很快就会迁移到EF迁移。你的答案正是我想要的。谢谢
    public partial class AddUniqueConstrains : DbMigration
    {
        public override void Up()
        {
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_AccountNumber UNIQUE(AccountNumber)");
            Sql("ALTER TABLE Account ADD CONSTRAINT UQ_Account_GUID UNIQUE(GUID)");
        }
    
        public override void Down()
        {
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_AccountNumber UNIQUE");
            Sql("ALTER TABLE Account DROP CONSTRAINT UQ_Account_GUID");
        }
    }