gpt4 book ai didi

entity-framework - 如何在所有 RowVersion 列上自动设置 ConcurrencyMode=Fixed?

转载 作者:行者123 更新时间:2023-12-03 11:27:31 25 4
gpt4 key购买 nike

EF 默认为无并发控制(最后一次写入获胜),这允许丢失更新。
可以通过在 RowVersion 列上设置 ConcurrencyMode=Fixed 来明确配置强制开放式并发检查。

我们如何在所有表的 RowVersion 列上自动设置 ConcurrencyMode=Fixed?
从数据库重新创建 EF 模型时,必须手动执行此操作,我们可能会忘记它在没有并发控制的情况下运行。

最佳答案

这类似于 Mohamed Cassim 的答案,但我已更新代码以使用 XML 属性搜索和替换,而不是字符串替换,因为设计者可以更改属性的顺序,或者其他属性可以具有不同的值。

将此另存为 FixVersionColumnConcurrencyMode.cs , 运行 csc FixVersionColumnConcurrencyMode.cs ,并在与 .edmx 文件相同的文件夹中运行生成的 FixVersionColumnConcurrencyMode.exe。您还可以让它执行项目的后期构建。

using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Reflection;
using System.Xml.Linq;

namespace Utility
{
internal class FixVersionColumnConcurrencyMode
{
private static void Main(string[] args)
{
string directoryPath = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
var files = Directory.GetFiles(directoryPath, "*.edmx");
foreach (var file in files)
{
XDocument xmlDoc = XDocument.Load(file);

IEnumerable<XElement> versionColumns =
from el in xmlDoc.Descendants()
where (string)el.Attribute("Name") == "Version"
&& (string)el.Attribute("Type") == "Binary"
&& (string)el.Attribute("ConcurrencyMode") != "Fixed"
select el;
bool modified = false;
foreach (XElement el in versionColumns)
{
modified = true;
el.SetAttributeValue("ConcurrencyMode", "Fixed");
}
if (modified)
xmlDoc.Save(file);
}
}
}
}

关于entity-framework - 如何在所有 RowVersion 列上自动设置 ConcurrencyMode=Fixed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12732161/

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