C# 在.Net SQL server中实现父子对象
我开发了一个带有时间表对象的web应用程序。对象的属性为列表。在SQL Server中,这反映在时间表和时间表这两个表中,时间表有一个外键指向时间表表的PK(Id自动编号)。 当前,时间表对象显示在网格上,用户在其中插入和修改条目并最终保存 在保存时间表时,我删除所有时间表条目,然后重新创建它们。当然,每次用户保存时间表时,都会将时间表的“自动编号”字段向上推C# 在.Net SQL server中实现父子对象,c#,asp.net,.net,sql,C#,Asp.net,.net,Sql,我开发了一个带有时间表对象的web应用程序。对象的属性为列表。在SQL Server中,这反映在时间表和时间表这两个表中,时间表有一个外键指向时间表表的PK(Id自动编号)。 当前,时间表对象显示在网格上,用户在其中插入和修改条目并最终保存 在保存时间表时,我删除所有时间表条目,然后重新创建它们。当然,每次用户保存时间表时,都会将时间表的“自动编号”字段向上推 这是实现这一目标的最佳方式吗?有更好的方法吗?您应该更新时间表条目,而不是删除,然后重新创建所有条目。使用您的主键,很容易知道哪些需要更
这是实现这一目标的最佳方式吗?有更好的方法吗?您应该更新时间表条目,而不是删除,然后重新创建所有条目。使用您的主键,很容易知道哪些需要更新
此外,您可以通过使用like或EXFORCE来自动执行许多操作。自动递增标识列的值在您的业务领域中没有相关性。它纯粹用于数据结构中的唯一性和逻辑关系。所以,是的,这个字段可以递增。无论如何,您的关系发生在时间表的FK和时间表PK之间
与其删除并重新插入这些记录,不如更新它们。我不确定您的要求/业务问题,因此无法进一步评论。除了一些额外的工作之外,您做事的方式没有太大问题。删除和重新创建子对象是一种常见的方法 不得不说,自动递增的数字被推高其实并不重要。所有时间表条目都应可通过相应的时间表外键检索 您不应该依赖自动生成的数字。ID字段是否上升不重要。真正的解决方案是找到一种一致的方法来正确检索它们,而不管代理键可能是什么 编辑 回应用户的评论 对于PK和FK,您仍将使用自动编号,但您应该将其与唯一标识大对象的方法相结合,通常是位于对象图顶部的对象 我通过在数据库中包含别名列来实现这一点 这是一个独特的varchar约束,它存在于我可能希望显式查找的任何内容上 考虑下面的例子
CREATE TABLE OrderTypes
(
Id INT IDENTITY(1,1) PRIMARY KEY,
Name varchar(100),
Alias varchar(30),
Active bit,
...
)
现在我不想按Id查找OrderType
,因为如果我必须从头开始重建数据库,这种情况可能会改变
我也不想按名称查找OrderType
。如果有人通过CMS功能更改订单类型怎么办
别名概念允许我为每种订单类型指定一个短名称,该名称不可从任何管理屏幕中编辑
继续OrderType
示例,我可能会给采购订单一个别名“purchaseorder
”,给销售订单一个别名“saleorder
”
当我想要获取与销售订单相关的OrderType行时,我可以使用:-
SELECT * FROM OrderTypes WHERE Alias = 'salesorder'
此时,查询具有自动生成的ID,因此可以基于该值进行进一步查询
SELECT * FROM Orders WHERE OrderTypeId = <that value I just safely derived>
从OrderTypeId=
对于自动生成的ID,这是一种比硬编码好得多的方法。因此,您建议不要将自动编号用作FK和PK?谢谢;我的看法是,我可能必须插入新条目(不是时间表的一部分,但已插入),删除不再是时间表一部分的条目,并最终更新已更改的条目…这对数据访问层来说是不是太多工作了,这样的操作应该放在您的业务层而不是DA层…您的建议非常有趣…我的印象是BLL应该只关心Timesheet.Save()类型的操作。然后,它将调用较低层(如服务层或数据访问层)中的方法来协调这些DB操作。。。。