linq-to-sql - 根据相关数据库列验证字符串长度

标签 linq-to-sql t-sql language-agnostic validation schema

在我的 Web 应用程序的一端,我有一个数据库表,存储了大量文本。

在中间,我有一个 API 来分隔我的应用程序层。

在另一端,我有一个由许多 TextBoxes(或 input type=text 表单元素,如果您愿意的话)组成的用户界面。

我需要 TextBoxmaxlength 属性与各个相关数据库表列中的最大字符串长度相同。我还想在我的 API 上进行字符串长度验证。

当然,我可以手动实现这一点,但是有人知道任何平台上的技术可以帮助自动设置其中的任何部分吗?

在我的场景中,我使用 ASP.NET 3.5 WebForms、LINQ to SQL 和 SQL Server 2005。

最佳答案

冒着根本不回答问题的风险......

您似乎有一条业务规则,规定“此特定字段最多应包含 N 个字符。”

我认为数据库列的大小和文本框最大长度都是此业务规则的单独结果。修复其中一个会混淆相关性与因果关系。

此外,通过检查数据库列的最大长度来强制执行此业务规则还会产生其他影响:

  • 您每次都会访问数据库,否则可能是内存中验证操作;

  • 如果您的业务规则略有变化(例如:N 从 100 个字符变为 80 个字符),那么您需要进行架构级别的更改;

  • 一些使用可变长度字符编码(例如 UTF8)的数据库仅模糊地定义给定列中适合的字符数;

  • 更广泛地说,您将业务规则与实现工件耦合 - 如果您稍后决定使用对象数据库怎么办?

我并不是建议您不要明智地调整数据库列的大小(您应该这样做),只是建议您将业务规则与数据库实现分离。如果您可以在应用程序代码中进行简单的固定长度检查,我建议您这样做。

编辑更仔细地阅读了您的问题,对于您的文本字段最大长度,您在验证之前需要 N 。尽管如此,这仍然是一个业务规则 - 您可以为字段访问器编写一个 MaximumLength 属性并询问它吗?

关于linq-to-sql - 根据相关数据库列验证字符串长度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/686633/

相关文章:

c# - 在自引用表中预加载 Linq to SQL 实体

c# - 复杂的 linq-to-sql 连接与 4 个表 : how many where clauses should there be?

sql - 关于建立库存数据库的问题

language-agnostic - 递归如何使运行时内存的使用变得不可预测?

math - 将整数分解为两个字节

c# - 将 DateTime 条目列表转换为自定义摘要列表

Linq 到 Sql 多对多

sql - SQL database_id 值是否被重用?

sql - 下(场) = 上(场)

math - float 学有问题吗?