如何使用 Entity Framework 6 在 ID 列中保存自定义值
How to save custom value in ID column using Entity Framework 6
我正在使用代码优先方法,我不知道如何将自定义 ID 传递到 ID 列每当我尝试传递 id 时,它都会显示以下错误:
Can't insert null to table Orders.ID Insert fails
public class Order
{
[Key]
public int ID { get; set; } // I WANT THIS COLUMN SHOULD BE SAVED AS "10001,10002,10003" INSTEAD OF "1,2,3,4"
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public string CustomerEmail { get; set; }
public virtual List<OrderItem> OrderItems { get; set; }
public virtual List<OrderHistory> OrderHistory { get; set; }
}
public class OrderHistory
{
public int OrderID { get; set; }
public int OrderStatus { get; set; }
public string Note { get; set; }
}
public class OrderItem
{
public int OrderID { get; set; }
[NotMapped]
public string ProductName { get; set; }
public int ProductID { get; set; }
public virtual Product Product { get; set; }
/// <summary>
/// Item Price is in Order Item because we can have a scenerio where we might charge less or greater than the Product Price.
/// </summary>
public decimal ItemPrice { get; set; }
public int Quantity { get; set; }
}
EDIT-2
添加 ID 后,它现在抛出另一个错误
列名称无效 'ID'
列名称无效 'ID'
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
考虑到您的情况,您可以通过以下方式实施。当你 add migration command
时,我已经解决了使用这个命令的问题,在此之前你可以像下面这样添加这个
migrationBuilder.Sql("DBCC CHECKIDENT ('Order ', RESEED, 10001)");
虽然您可以为非主键列添加预期的序列,但到目前为止我已经测试它不适用于主键列,因为迁移总是添加此命令。哪个强制执行SQL server to take the controls of identity
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
Note: So we need to add above mensioned command to override it. Which implement the custom identity as we want.
希望它能帮助您实现目标。
我正在使用代码优先方法,我不知道如何将自定义 ID 传递到 ID 列每当我尝试传递 id 时,它都会显示以下错误:
Can't insert null to table Orders.ID Insert fails
public class Order
{
[Key]
public int ID { get; set; } // I WANT THIS COLUMN SHOULD BE SAVED AS "10001,10002,10003" INSTEAD OF "1,2,3,4"
public string CustomerID { get; set; }
public string CustomerName { get; set; }
public string CustomerEmail { get; set; }
public virtual List<OrderItem> OrderItems { get; set; }
public virtual List<OrderHistory> OrderHistory { get; set; }
}
public class OrderHistory
{
public int OrderID { get; set; }
public int OrderStatus { get; set; }
public string Note { get; set; }
}
public class OrderItem
{
public int OrderID { get; set; }
[NotMapped]
public string ProductName { get; set; }
public int ProductID { get; set; }
public virtual Product Product { get; set; }
/// <summary>
/// Item Price is in Order Item because we can have a scenerio where we might charge less or greater than the Product Price.
/// </summary>
public decimal ItemPrice { get; set; }
public int Quantity { get; set; }
}
EDIT-2
添加 ID 后,它现在抛出另一个错误 列名称无效 'ID' 列名称无效 'ID'
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ID { get; set; }
考虑到您的情况,您可以通过以下方式实施。当你 add migration command
时,我已经解决了使用这个命令的问题,在此之前你可以像下面这样添加这个
migrationBuilder.Sql("DBCC CHECKIDENT ('Order ', RESEED, 10001)");
虽然您可以为非主键列添加预期的序列,但到目前为止我已经测试它不适用于主键列,因为迁移总是添加此命令。哪个强制执行SQL server to take the controls of identity
.Annotation("SqlServer:ValueGenerationStrategy", SqlServerValueGenerationStrategy.IdentityColumn)
Note: So we need to add above mensioned command to override it. Which implement the custom identity as we want.
希望它能帮助您实现目标。