![]() |
1
7
怎么样? 您没有表示数据库中某一行的对象容器是有原因的吗?在解决方案的其他层中,创建自定义对象更容易处理。因此,按照这种方法,有两个非常可行的解决方案来解决您的问题。 假设您有一个表示数据库中产品的自定义对象。您可以这样定义对象:
您可以这样填写一个产品集合(集合):
请注意,我正在通过读卡器的get检索值 X 哪里 X 是要从列中检索的类型。这是Microsoft建议的根据 http://msdn.microsoft.com/en-us/library/haa3afyz.aspx (第二段),因为检索到的值不必装箱到System.Object中,也不必装箱到基元类型中。 由于您提到在ASP.NET应用程序中将多次调用此方法,因此您可能需要重新考虑这种通用方法。用于返回 名称值集合 在这种情况下(在许多其他情况下也可以这样说),性能非常差。更不用说,在不考虑当前用户的区域性的情况下,将每个数据库列转换为字符串,而区域性是ASP.NET应用程序中的一个重要考虑因素。我认为这个 名称值集合 也不应该在其他开发工作中使用。我可以继续说下去,但我会帮你保留我的胡言乱语。 当然,如果您要创建直接映射到表的对象,您也可以查看 LINQ to SQL 或 ADO.NET Entity Framework . 你会很高兴的。 |
![]() |
2
3
在代码效率方面,您可能只需最少的击键就可以完成这项工作,虽然这看起来很浪费,但维护起来可能最简单。但是,如果您只关心执行严格必要的操作的效率,那么您可以创建一个轻量级结构/类来填充数据,并使用类似于以下内容的内容:
同样,您可以以类似的方式将数据直接转储到您的kvps集合中… 它看起来不像原始代码那么干净,但它不会创建整个表来获取单行… 正如在另一篇关于代码气味的文章中提到的,我可能不会将命令作为参数传入,我认为我更可能将命令封装在这个方法中,只传递数据库连接和我想要的资产的ID——当然,假设我没有使用缓存,并将myasse传回。T实例。这使得该方法足够通用,可以用于任何数据库类型——当然,假设存储过程存在。这样,我的其余代码就不需要知道关于数据库的任何信息,而只需要知道它是什么类型的数据库…在应用程序的其余部分,我可以使用myassetinstance.id、myassetinstance.name、myassetinstance.description等引用资产信息… |
![]() |
3
2
你在妖魔化的是一种叫做 Primitive Obsession . 创建自定义类型并从存储库方法返回。不要过于笼统…您将最终把这种复杂性推到业务代码中,因为您将使用纯过程代码与实体进行交互。最好创建业务模型的对象。 如果您担心过多的数据访问代码,请使用ORM框架来为您生成这些代码。您不应该让这一问题在您的应用程序层中影响糟糕的设计。 |
![]() |
4
0
缓存数据会比优化返回单个行带来更多好处。如果您选择的是主键,那么返回数据表、数据行或自定义对象之间不太可能有任何区别。这让我觉得是过早的优化。我会更加明确,但我不确定混合中的字节数组是否会改变事情。 |
![]() |
5
0
谢谢大家的意见。我知道ORM可能是一个不错的选择,MVC框架是我的下一个选择。 为了提供更详细的信息,我要显示的代码来自我的数据访问层中的helpers部分,然后将行或名称值集合传递给业务层以转换为对象。 我认为mnero0429和balabaster代码示例给了我正确的方向。使用一个数据阅读器,像这样手动获取数据,而不必乱弄智能媒体对象。感谢您提供详细的MS Link mnero0429。公平对待最初的困扰-我确实在业务层从IT中创造了一个合适的资产类别;) 我也将研究ADO实体框架。 再次感谢您的建议-我知道即使我使用了dataset.tables[0].rows[0][“bob”]或其他类似的方法,世界也会不断地变化,但是当您感到痒时-什么是最好的办法,最好的办法就是刮一下! |
![]() |
user1946932 · .Net正则表达式在所有字符前添加空格 6 月前 |
![]() |
TSDrake · 发布ASP。没有特定文件夹的.NET应用程序 6 月前 |
![]() |
Vengat Ramanan · 用户登录Asp时隐藏导航和页脚。网络核心 10 月前 |
![]() |
ramamoorthy_villi · 输入验证错误外键字段 11 月前 |