实体框架 - 插入行而不自动增量

时间:2017-08-23 14:25:23

标签: c# sql entity-framework data-annotations ef-migrations

我们在ERP系统中拥有一个拥有ID为1-30000的客户的数据库。现在我们正在创建一个新网站,我们希望将一些现有客户导入网站,但不是全部。现在,网站上Customer表中的主键是int类型,其自动增量从600001开始,以防止任何ID冲突。

我们有三个想法:

  1. 禁用身份并插入客户,然后重新打开身份以防止他们的ID被替换。

  2. 保持身份开启并为导入的ERP客户生成新ID,然后将旧ID作为参考放在表格的不同列中,因为这是他们的客户编号。注册的新客户在CustomerNumber列中没有值,因为它们未导入,当我们调用db.SaveChanges()以防止两次调用数据库时,有没有办法自动设置CustomerNumber与Id相同?

  3. 禁用身份,每次创建新客户时,我们都会进行数据库调用以获取下一个ID。

  4. 一些代码:

    var customer = new CustomerDto()
    {
           Id = 6000,
           Type = CustomerDto.CustomerType.Company,
           Company = "Company",
           Ssn = "1234567890",
           FirstName = "Firstname",
           LastName = "Lastname",
           Email = "email@email.com"
    }
    db.Customers.Add(customer);
    db.SaveChanges();
    

    修改

    你们有些人建议选择选项1.这就是我的尝试:

     var db = new SsfContext(true);
                db.Database.ExecuteSqlCommand("SET IDENTITY_INSERT [dbo].[Customer] ON");
                db.Customers.Add(customer);
                db.SaveChanges();
    

    那不起作用。我也尝试将此添加到OnModelCreating方法,但这给了我以下错误:

      

    System.InvalidOperationException:'支持' MyContext'   自创建数据库以来,上下文已更改。考虑使用   代码优先迁移以更新数据库

    modelBuilder.Entity<CustomerDto>()
                        .Property(x => x.Id)
                        .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);
    

    这就是dto的样子:

    [Table("Customer")]
        public class CustomerDto
        {
            public int Id { get; set; }
    
            /// <summary>
            /// Customer Type
            /// </summary>
            [Required]
            [JsonProperty(Order = 2)]
            public CustomerType Type { get; set; }
    
            [Required]
            [JsonIgnore]
            public string Password { get; set; }
    
            [JsonProperty(Order = 3)]
            public string Company { get; set; }
    
            /// <summary>
            /// Either Corporate identity or social security number
            /// </summary>
            [Required]
            [JsonProperty(Order = 4)]
            public string Ssn { get; set; }
    
            [Required]
            [JsonProperty(Order = 5)]
            public string FirstName { get; set; }
    
            [Required]
            [JsonProperty(Order = 6)]
            public string LastName { get; set; }
    
            [Required]
            [JsonProperty(Order = 7)]
            public string Email { get; set; }
    }
    

0 个答案:

没有答案