gpt4 book ai didi

c# - 数据访问层中的静态与实例写入方法

转载 作者:太空宇宙 更新时间:2023-11-03 20:26:49 25 4
gpt4 key购买 nike

我正在用 C# 为 SQL Server 数据库表创建数据访问层。数据访问层包含表中每一列的属性,以及从数据库读取和写入数据的方法。让读取方法基于实例似乎很有意义。我的问题是关于处理数据库生成的主键属性 getter/setter 和 write 方法。据我所知,我有三个选择...

选项 1:使用静态方法,同时只允许主键上的 getter 将允许我强制将所有正确的值写入数据库,但作为开发人员来说是笨拙的。

选项 2:使用基于实例的写入方法会更易于维护,但我不确定我将如何处理主键上的获取/设置并且我可能必须先对实例实现某种验证写入数据库。

选项 3:其他,但我对 LINQ 和拖放操作持谨慎态度,它们以前曾让我感到头疼。

这里有标准做法吗?也许我只需要一个指向可靠教程的链接?

最佳答案

您可能想继续阅读 active record patterns以及其中的一些示例,然后实现您自己的类。

这是一个简单类的粗略草图,其中包含一些基本概念(如下)。

按照这种方法,您可以扩展模式以满足您的需求。您可能会从数据库中以对象的形式检索记录,更改其值,然后更新记录(选项 2)。或者,如果开销太大,则使用直接更新数据库中记录的静态方法(选项 1)。对于插入,数据库(SP/查询)应该在需要时验证表上的自然/唯一键,并可能返回一个特定的值/代码,指示唯一约束错误)。对于更新,如果允许更新自然键字段,则需要执行相同的检查。

这在很大程度上取决于您的应用程序允许特定表具有哪些功能。

与静态方法相比,我倾向于从数据库中检索对象然后更改值并保存。对我来说,通过调用代码更容易使用,并且可以更轻松地处理类内部的神秘业务逻辑。

public class MyEntityClass
{
private int _isNew;
private int _isDirty;
private int _pkValue;
private string _colValue;

public MyEntityClass()
{
_isNew = true;
}

public int PKValue
{
get {return _pkValue;}
}

public string ColValue
{
get {return _colValue;}

set
{
if (value != _colValue)
{
_colValue = value;
_isDirty = true;
}
}
}

public void Load(int pkValue)
{
_pkValue = pkValue;

//TODO: query database and set member vars based on results (_colVal)

// if data found
_isNew = false;
_isDirty = false;
}

public void Save()
{
if (_isNew)
{
//TODO: insert record into DB
//TODO: return DB generated PK ID value from SP/query, and set to _pkValue
}
else if (_isDirty)
{
//TODO: update record in DB
}
}
}

关于c# - 数据访问层中的静态与实例写入方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10201036/

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