gpt4 book ai didi

linq-to-sql - linq2sql 缺少事件模型?

转载 作者:行者123 更新时间:2023-12-02 00:46:15 25 4
gpt4 key购买 nike

为什么在 Dbml 中生成的“表”类不包含有用的事件,如

在插入前OnBeforeUpdate

OnAfterInsert等

我错过了什么吗?

这个问题与尝试设置时间戳列的挫败感有关。

更新

我创建了以下方法来巧妙地做到这一点,大家怎么看?

public class Model
{
internal virtual void OnBeforeInsert()
{
}
internal virtual void OnBeforeUpdate()
{
}
}

public partial class DbDataContext
{
public override void SubmitChanges(System.Data.Linq.ConflictMode failureMode)
{
foreach (var insert in this.GetChangeSet().Inserts)
{
if (insert is Model)
{
((Model)insert).OnBeforeInsert();
}
}

foreach (var update in this.GetChangeSet().Updates)
{
if (update is Model)
{
((Model)update).OnBeforeUpdate();
}
}

base.SubmitChanges(failureMode);
}
}

public partial class Address : Model
{
internal override void OnBeforeInsert()
{
var created = DateTime.Now;
this._Modified = created;
this._Created = created;
}
}

最佳答案

我最近遇到了类似的问题。

生成的类中有一个用于“OnValidate”的分部方法。简单地在你的局部方法中声明该方法将强制调用它(vb.net 不支持像 c# 这样的局部方法)或者在 c# 中简单地声明一个局部方法。

向该方法传递一个 System.Data.Linq.ChangeAction 枚举,它是:Delete、Insert、Update 或 None。

下面是您使用内置分部方法所做的示例。

public partial class Address
{

private partial void OnValidate(System.Data.Linq.ChangeAction action)
{
if (action == System.Data.Linq.ChangeAction.Insert)
{
var created = DateTime.Now;
this._Modified = created;
this._Created = created;
} else if (action == System.Data.Linq.ChangeAction.Update) {
this._Modified = DateTime.Now;
}
}

}

关于linq-to-sql - linq2sql 缺少事件模型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/399569/

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