创建行时自动分配列值

时间:2017-04-07 17:13:31

标签: sql-server entity-framework

我正在使用EF6和SQL Server 2014。

我有类似以下简化模型:

public class Order
{
    public int Id { get; set; }
    public DateTime Created { get; set; }
    public IEnumerable<OrderItem> OrderItems { get; set; }
}
public class OrderItem
{
    public int Id { get; set; }
    public int OrderId { get; set; }
    public Order Order { get; set; }
    public string ItemName { get; set; }
    public int OrderItemNumber { get; set; }
}

Id属性是标准的自动增量主键。

OrderItem.OrderItemNumber属性唯一标识给定订单上下文中的OrderItem。

当插入新的OrderItem行时,需要为父订单分配下一个OrderItemNumber,类似于 SELECT COALESCE(MAX(OrderItemNumber),0) FROM dbo.OrderItems WHERE OrderId = 2

是否存在使用EF6 / SQL Server在插入行时自动分配OrderItemNumber的方法?

1 个答案:

答案 0 :(得分:0)

虽然这证明了EF支持触发器的有趣学习经验(见https://github.com/NickStrupat/EntityFramework.Triggers)但我最终决定重新建模。

在这种情况下,我的问题是错误建模的结果。 OrderItemNumber属性是多余的,所以我删除了它;可以从Id值推断出OrderItems的创建顺序,并且没有必要允许重新排序。