我们在ERP系统中拥有一个拥有ID为1-30000的客户的数据库。现在我们正在创建一个新网站,我们希望将一些现有客户导入网站,但不是全部。现在,网站上Customer表中的主键是int类型,其自动增量从600001开始,以防止任何ID冲突。
我们有三个想法:
禁用身份并插入客户,然后重新打开身份以防止他们的ID被替换。
保持身份开启并为导入的ERP客户生成新ID,然后将旧ID作为参考放在表格的不同列中,因为这是他们的客户编号。注册的新客户在CustomerNumber列中没有值,因为它们未导入,当我们调用db.SaveChanges()以防止两次调用数据库时,有没有办法自动设置CustomerNumber与Id相同?
禁用身份,每次创建新客户时,我们都会进行数据库调用以获取下一个ID。
一些代码:
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; }
}