我已开始将旧的 ADO.NET 代码移植到 Linq to Entities。一个特别有用的函数是 ObjectContext.Translate
及其同伴ObjectContext.ExecuteStoreQuery
它允许您使用任意 SQL 并将它们解包成普通的旧数据对象。
但是,列映射中很容易出错:拼写错误的列名或不同的大小写会导致 .NET 属性不再与预期的 SQL 列匹配。检测数据库模式何时发生变化特别棘手。当 .NET 属性不对应于 sql 列时,不会引发异常 - 相反,Linq toEntity 只是 sets the property to the default value (null
、0
等)。此行为偶尔可能有用,允许类型包含额外的属性,但它也非常适合隐藏错误,特别是当 null
或默认值是该列的有效值时。
有没有办法改变这种行为,或者至少检测它何时发生,以便此类错误立即显而易见?
换句话说:我可以强制 .NET 对象的形状必须与 SQL 查询的形状完全匹配吗?
最佳答案
不,您不能强制执行它,但您可以编写一组集成测试,这些测试将自动验证您的类是否仍然具有正确的形状。
关于.net - 对象上下文.翻译: avoiding column-mapping mistakes,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9664656/