代码之家  ›  专栏  ›  技术社区  ›  War

ef代码优先迁移,db生成的guid键

  •  1
  • War  · 技术社区  · 6 年前

    一行字的问题

    如何让ef作为代码首次迁移的一部分生成

    ALTER TABLE [DMS].[Forms] ADD  CONSTRAINT [DF_DMS.Forms_Id]  DEFAULT (newid()) FOR [Id]
    GO
    

    问题的更多细节

    我将构建一个简单的表来存储有关表单的信息,因为碰巧我已经在我的数据库中为另一个表工作了,但是如果我向您展示代码(见下文),您会发现我遇到的问题比看起来更奇怪……

    首先是工作示例实体:

    [Table("Files", Schema = "DMS")]
    public class File
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        ...
    }
    

    好吧,现在不工作的那个…

    [Table("Forms", Schema = "CMS")]
    public class Form
    {
        [Key]
        [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
        public Guid Id { get; set; }
        ...
    }
    

    如问题中所述,我首先使用ef代码,下面是迁移代码:

    工作的那个:

    CreateTable(
        "DMS.Files",
        c => new
            {
                Id = c.Guid(nullable: false),
                ...
            })
        .PrimaryKey(t => t.Id)
        ...;
    

    …不工作的那个…

    CreateTable(
        "CMS.Forms",
        c => new
            {
                Id = c.Guid(nullable: false),
                ...
            })
        .PrimaryKey(t => t.Id)
        ...;
    

    所以一切都很好…然后我用“update database”命令迁移我的数据库,并编写这两个表的脚本…

    工作的那个:

    ...
    CREATE TABLE [DMS].[Files](
        [Id] [uniqueidentifier] NOT NULL,
        ...
     CONSTRAINT [PK_DMS.Files] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    
    ALTER TABLE [DMS].[Files] ADD  CONSTRAINT [DF_DMS.Files_Id]  DEFAULT (newid()) FOR [Id]
    GO
    ...
    

    …不工作的那个…

    ...
    CREATE TABLE [CMS].[Forms](
        [Id] [uniqueidentifier] NOT NULL,
        ...
     CONSTRAINT [PK_CMS.Forms] PRIMARY KEY CLUSTERED 
    (
        [Id] ASC
    )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
    ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
    
    GO
    ...
    
    1 回复  |  直到 6 年前
        1
  •  1
  •   War    5 年前

    我不知道为什么,但这能解决问题…

    工作的那个(没有变化):

    CreateTable(
        "DMS.Files",
        c => new
            {
                Id = c.Guid(nullable: false),
                ...
            })
        .PrimaryKey(t => t.Id)
        ...;
    

    …以及不工作的那个(应用了修复程序)……

    CreateTable(
        "CMS.Forms",
        c => new
            {
                Id = c.Guid(nullable: false, defaultValueSql: "newid()"),
                ...
            })
        .PrimaryKey(t => t.Id)
        ...;
    

    我想我一定是在ef中遇到了某种错误,导致它在某些情况下正确地生成迁移。

    推荐文章