我有点惭愧地说我从未使用过ORM; 你可能还记得我的大部分职业经历都是使用经典ASP和小.NET进行攻击,而我只是维护.
为了我自己的职业生涯以及为工作中的新项目做准备(最终在.NET中完成!)我正在考虑在我的技能组中添加一个ORM - 作为受虐狂我是我也会看TDD而我正忙于这个项目.
无论如何,我使用.NET 3.5作为项目(或计划,反正)所以我试图决定我想要选择什么ORM; 就像我说我对它们并不熟悉,但我一般都知道它们应该做什么,以及它们是如何做到的.我的选择基本上取决于NHibernate或LINQ/Entity Framework.我没有使用过任何东西,但我看过一些LINQ2SQL和NHibernate的演示.
NHibernate看起来总体上更健壮(Linq2Sql甚至不是"真正的"ORM)以及在ALT.NET社区中大量使用,我想要更多地探索它.但是,EF是微软的产品,因此,大多数开发团队都会大量使用EF,他们只使用微软推出的任何产品,而不会考虑任何其他选择.
我已经听说了关于EF的好事和坏事,但是如果/当我在一个真正的开发团队的公司找到一份更好的工作时,我想选择能给我一个良好基础的东西以及对其他雇主好看的东西.
编辑:我应该补充一点,如果在选择ORM时有任何问题,应用程序将不得不处理现有的数据库.
编辑(02/15/2009 6:48 PM):它将使用的唯一数据库是SQL Server 2005 Standard,在Windows Server 2003上运行.鉴于这是一个工作项目,我的目标是选择一些赢得的东西我需要很长时间才能加快速度(因为我需要提高工作效率并且"学习新工具"对管理来说看起来不太好)但是比滚动我自己的DAL要好一些.当时我还没有确定应用程序是智能客户端还是ASP.NET应用程序,但其中的一部分很可能是用ASP.NET MVC完成的.
你最喜欢哪个?
假设我们有一个通用的Product表,它有一个ID,一个名称和一个类别的外键引用.您是否愿意将您的桌子命名为:
CREATE TABLE Products
(
ProductID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(CategoryID),
ProductName varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
使用列的显式命名(例如产品名称,产品 ID)或类似的东西:
CREATE TABLE Products
(
ID int NOT NULL IDENTITY(1,1) PRIMARY KEY,
CategoryID int NOT NULL FOREIGN KEY REFERENCES Categories(ID),
Name varchar(200) NOT NULL
)
Run Code Online (Sandbox Code Playgroud)
从我所看到的,.NET世界中的约定是明确的 - 样本倾向于使用第一个示例,而开源和RoR世界倾向于第二个示例.就个人而言,我发现第一眼看上去更容易阅读和理解: select p.ProductID, p.ProductName, c.CategoryName from Categories c inner join Products p on c.CategoryID = p.CategoryID对我来说似乎比自然更自然select p.ID AS ProductID, p.Name AS …
我正在尝试学习Ruby on Rails.虽然我只了解基础知识,但我对基础知识和编写自己的模型,控制器和视图非常有信心.
最近我发现,当我开始一个新的应用程序时,我的大多数模型很好地融入了REST哲学,而我最终只是手工编写大部分相同的脚手架生成的代码.在这种情况下,您认为从script/generate scaffold我的每个必需模型开始使用,然后根据需要修改代码是否可以接受?我见过的流行观点似乎是脚手架是一个"新手技巧"而且真正的开发人员不使用它,但对于大多数应用程序来说,它似乎创造了一大堆可用的代码(而不是坏代码) .
你的想法是什么?
我定义了以下过滤器:
# application_controller.rb
class ApplicationController < ActionController::Base
before_filter :find_account
private
def find_account
@current_account = Account.find_by_subdomain!(request.subdomains.first)
end
end
Run Code Online (Sandbox Code Playgroud)
在我的测试中:
# users_controller_test.rb
class UsersControllerTest < ActionController::TestCase
setup do
@request.host = "test.myapp.local"
end
# ...
end
Run Code Online (Sandbox Code Playgroud)
现在test被定义为我在使用所有请求之前加载的虚拟帐户的子域factory_girl.但是,这是抛出一个零对象错误,说@request是零.删除设置块会导致我的所有测试失败,因为find_account找不到帐户,因此会抛出RecordNotFound错误.
我究竟做错了什么?
我很好奇应用程序的全局系统常见扩展的"层"属于什么.例如,我可能有扩展,让我使用类似Rails的"DaysAgo","MonthsAgo"等类型的扩展整数方法.这通常属于哪个项目层?我在考虑基础设施,但这似乎意味着与数据库相关(例如基础存储库和数据访问).我有一个"核心"库项目,所以也许它属于那里?
我知道您希望对与特定类组相关的扩展进行分组,但这些扩展主要用于整个应用程序.在扩展方法之前的几天,它们将处于Utilities静态类等中,那么它们现在应该在哪里生活?
我有一个测试项目,其中App.config设置了一些设置的默认值.我想在本地级别覆盖这些设置,以便每个开发人员可以使用自己的凭据.
在我的App.config中,我有以下内容:
<appSettings file="Local.config">
<add key="Username" value="USERNAME"/>
<add key="Password" value="PASSWORD"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
在Local.config(在同一目录中)我有以下内容:
<appSettings>
<add key="Username" value="wayne"/>
<add key="Password" value="secret"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
当我运行我的测试时,我希望获取Username的值将从Local.config返回"wayne"; 相反,它是来自App.config的"USERNAME" - 似乎它实际上并没有检测到我想覆盖另一个文件中的设置.
我究竟做错了什么?
我正在考虑将ASP.NET用于新的SaaS服务,但是为了爱我,我似乎无法弄清楚如何根据大多数SaaS应用程序(例如37Signals)这样的子域进行帐户查找.
例如,如果我提供yourname.mysite.com,那么我如何使用ASP.NET(专门用于MVC)来提取子域,以便我可以加载正确的模板(显示公司名称等)?可以通过常规路由完成吗?
这似乎是SaaS中的常见问题,因此必须有一种简单的方法在ASP.NET中执行此操作; 我知道有些插件可以用于其他框架,比如Ruby on Rails.
对于Asp.Net软件作为服务应用程序,我想做基于帐户的子域,如Basecamp和其他37Signals产品.例如,acme.myapp.com将为该客户加载该帐户并仅撤回其信息.
这在Ruby on Rails中很容易实现,但是如何在ASP.NET MVC中处理这个功能并且能够扩展到可能数百个帐户?
我正在玩ASP.NET MVC,我发现有一些替代视图引擎可供它使用,例如NHaml和Spark.我的问题是你为什么要使用备用视图引擎?有这样的事情,我认为没有好处:
<ul if="products.Any()">
<li each="var p in products">${p.Name}</li>
</ul>
<else>
<p>No products available</p>
</else>
Run Code Online (Sandbox Code Playgroud)
使用Spark视图引擎(从那以后,我没有使用Spark来验证这一点并且可能完全错误,因为你将代码作为字符串传递,所以你不会得到Intellisense)和:
<% if products.Any() { %>
<ul>
<% foreach (var p in products) { %>
<li><%= p.Name %></li>
<% } %>
</ul>
<% } else { %>
<p>No products available</p>
<% } %>
Run Code Online (Sandbox Code Playgroud)
使用内置的ASP.NET MVC模板格式(虽然我承认悬挂的大括号非常难看).有没有合理的理由除了不喜欢"gator"标签(或悬挂花括号)以考虑使用备用视图引擎?或者它是否很酷,因为它是新的东西?
这是一个假设的情景.假设您刚刚在一家拥有小型开发团队的公司工作过.该公司使用.NET 2.0编写的内部CRM/ERP类型系统来管理所有日常事务(让我们简化并说出客户帐户和记录).该应用程序是在几年前编写的,当时.NET 2.0刚刚推出并使用以下架构设计:
让我们说,随着应用程序中添加了更多更改和要求,您开始觉得旧架构正在显示其年龄,并且变更越来越难以实现.您将如何引入重构步骤A)使应用程序现代化(即正确分离关注点)和B)确保应用程序能够轻松适应组织中的变化?
国际海事组织的变化将涉及:
你的想法是什么?同样,这是一个完全假设的情景,我们许多人过去曾面临这种情况,或者可能最终面临.
asp.net-mvc ×3
asp.net ×2
c# ×2
saas ×2
.net ×1
app-config ×1
architecture ×1
linq ×1
multi-tenant ×1
naming ×1
nhibernate ×1
orm ×1
refactoring ×1
sql ×1
testing ×1
viewengine ×1