在.NET,SQL Server中实现父子对象



我已经开发了具有时间表对象的Web应用程序。该对象作为属性列表。在SQL Server中,这反映在2个表,时间表和时间表中,而时间表则具有外键指向时间表表的PK(ID Autonumber)表。当前,时间表对象显示在用户对条目进行插入和修改并最终保存的网格上。

保存时间表时,我删除了所有时间表条目,然后重新创建它们。当然,这会每次用户保存时间表时,都会将次数安装的自动计字段提高。

这是实现这一目标的最佳方法吗?有更好的方法吗?

您应该更新时间表条目,而不是删除,然后重新创建所有内容。使用您的主键,很容易知道需要更新哪些。

另外,您可以使用诸如实体框架或nhibernate的对象估计映射器(例如。

自动增量身份列的值在您的业务领域中没有相关性。它被纯粹用作数据结构中的独特性和逻辑关系。因此,是的,这个字段正在增加。无论如何,您的关系发生在时间表的FK和时间表PK之间。

而不是删除和重新插入这些记录,最好更新它们。我不确定您的需求/业务问题,因此无法进一步评论。

除了一些其他工作之外,您正在做事的方式没有太多问题。删除和重新创建子对象是一种常见的方法。

不得不说,自动插入数字被推到上面并不重要。所有时间表条目都应通过相应的时间表外键检索。

您不应依靠自动生成的数字。ID字段上升并不重要。您的真正解决方案是找到一种一致的方法来正确检索它们,而不论代理键可能是什么。

编辑

回应用户的评论。

您仍然将自动数用于PK和FKS,但是您应该将其与唯一识别大型东西的方法相结合,这通常是对象图的顶部的东西。

我通过在我的数据库中包含一个别名列来实现此功能。

这是一个独特的var charch约束,它依靠我可能想明确查找的任何东西。

考虑以下示例。

CREATE TABLE OrderTypes
(
  Id INT IDENTITY(1,1) PRIMARY KEY,
  Name varchar(100),
  Alias varchar(30),
  Active bit,
  ...
)

现在我不想通过ID查找OrderType,因为如果我必须从头开始重建DB,那可能会改变。

我也不想通过名称查找OrderType。如果有人通过CMS函数更改订单类型怎么办?

别名概念允许我给每个订单类型一个简短的名称,该名称是从任何一个管理屏幕

继续OrderType示例,我可能给购买订单一个" purchaseorder"的别名,销售订单和" salesorder"的别名。

当我想获得与销售订单有关的订购行时,我可以使用: -

SELECT * FROM OrderTypes WHERE Alias = 'salesorder'

此时,您的查询具有自动生成的ID,因此您可以根据该值进行进一步的查询。

SELECT * FROM Orders WHERE OrderTypeId = <that value I just safely derived>

这比自动生成ID的硬编码要好得多。

最新更新