gpt4 book ai didi

asp.net - Entity Framework ,将列更改为只读

转载 作者:行者123 更新时间:2023-12-02 11:18:49 25 4
gpt4 key购买 nike

我正在使用 .NET 4.0、Entity Framework 4 和 SQL Server 2005。

我有一个现有的 EF 模型。名为 Order 的实体之一有一个名为 Name (varchar 255) 的列,该列上有一个唯一的键。

过去,此列中的值是由最终用户在 Web 表单上提供其值来确定的。在提交表单之前,会与数据库中的其他值进行检查,以确保值是唯一的。

要求已更改,因此现在该列的值将在第一次创建订单时计算,此后不再更改。该计算涉及对具有相同值的字段 VariableNumber (varchar 255) 的现有订单进行计数。例如:

int count = this.Orders.Where(o => o.VariableNumber == variableNumber).Count();
++count;
return string.Format("{0}-{1:000}", variableNumber, count);

我的问题是:我应该在哪里放置此逻辑以确保首次创建订单时计算名称?

谢谢。

最佳答案

一种方法是在数据库触发器中执行此操作。另一种方法是在重写的 SaveChanges 中执行此操作:

public override void SaveChanges()
{
var orders = context.ObjectStateManager
.GetObjectStateEntries(EntityState.Added)
.Select(e => e.Entity)
.OfType<Order>();

if (orders.Count() > 0)
{
// serialized transaction to lock records so
// that concurrent thread can't insert orders
// with the same name while this threads preparing
// its orders
using (var scope = new TransactionScope())
{
// Here get current counts for variable numbers

foreach (var order in orders)
{
order.Name = ...;
}

base.SaveChanges();
scope.Complete();
}
}
else
{
// saving changes with default transaction
base.SaveChanges();
}
}

关于asp.net - Entity Framework ,将列更改为只读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5653413/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com