我现在已经阅读了很多内容并认为以下内容是不可行的,但我希望尽可能得到专家的确认,并可能就“最佳”解决方法提出建议。
在所有自动生成的linq-to-sql类中,我最终将所有属性加倍,以便在设置值时对值进行检查,例如,我有一个Person类,其中包含Name属性做起来:
public partial class Person
{
public string Name
{
get { return this._Name; }
set
{
if (!string.IsNullOrEmpty(value))
{
value = value.trim();
this._Name = value.Substring(0, Math.Min(value.Length, 200));
}
else
throw new InvalidOperationException("Person name cannot be blank");
}
}
}
简单检查以确保当我持久保存到数据库时,名称不会超过最大长度。
这意味着我最终会加倍自动生成的类中的每一个属性,并且会造成大量混乱,因为它们最终被命名为类似的东西。
我尝试通过自己的对象表示在部分类的顶部添加一个层,但在实例化依赖于另一个的类时遇到了问题...说一个人有公司,你实例化了人和公司为公司实例化人员,重新安置公司等......
是否有一些“好”的方式来做我想要对部分类做的事情?如果没有,哪种替代方案效果最好? 也许继承每一个部分类并覆盖属性?使用OnChange事件来执行检查?
答案 0 :(得分:2)
建议的方法在ScottGu的博客文章中列出:http://weblogs.asp.net/scottgu/archive/2007/07/11/linq-to-sql-part-4-updating-our-database.aspx
再次,这里
http://geekswithblogs.net/AzamSharp/archive/2008/03/30/120875.aspx
此外,您可能希望研究从L2S迁移到实体框架,它提供了更强大的验证支持。
答案 1 :(得分:1)
听起来像你试图让linq到sql做一些它从未打算做的事情。当我遇到这样的情况时,我开始寻找一个更适合我想要完成的工具/库/ orm等