小编Geo*_*uer的帖子

最容易学习和使用.NET ORM框架?

注意:现在有人提出这个问题,请注意日期.这个问题已接近4年,而且信息相对过时.根据我的经验,NHibernate现在相对容易使用(使用流畅的界面),Entity Framework是一个合法的竞争者,而像Dapper和Massive这样的MicroORMS正变得非常流行.


我们正在重写我们的核心Web应用程序之一,我终于从管理层清楚地了解了用ORM框架替换可怕的存储过程纠结以实现我们的数据访问层.

万岁,对我而言.现在我必须选择一个.

以下我玩了一下

现在我知道NHibernate是真正的Alt.Netty选择,但问题是我和承包商合作,据我所知,他们从来没有听说过,NHibernate在相当的学习曲线上享有盛誉.在此期间,亚音速似乎是一种更为直接的方法.我也了解实体框架,但我对它的'meh'招待和Linq对Oracle持谨慎态度,但我很担心我几乎没有听到任何关于它的事实.

所以问题是:

  1. 还有我应该考虑的框架吗?
  2. 你对我的情况推荐哪一个?

更多考虑因素:

  • 当我说我对这些框架玩了一些时,我的意思是.我已经配置了它们并使用它们来提取一些数据以确保它一切正常.这就是它的程度.
  • 这是一个Oracle数据库(正如您可能已经从包含Linq2Oracle中猜到的那样)
  • 由于这是重写,因此数据库已经存在且具有稳定的模式
  • 我并不太担心表现.我们的申请通常一次最多为几个人服务.
  • 你们是那些必须回答我将要遇到的大量问题的人

我倾向于亚力士,但我很好奇人们可能会说些什么.

.net orm

11
推荐指数
1
解决办法
4870
查看次数

实体框架以一对多替换集合的正确方法

假设客户有许多电话号码,而电话号码只有一个客户.

public class PhoneNumber : IValueObject {
  public string Number {get; set;}
  public string Type {get; set;}
}

public class Customer : IEntity {
   public ICollection<PhoneNumber> phones {get; private set;} //ew at no encapsulated collection support
   public void SetPhones(params PhoneNumber[] phones) {
       this.phones.Clear();
       this.phones.AddRange(phones);
   }
}
Run Code Online (Sandbox Code Playgroud)

如果我像这样进行EF映射并运行它,每次设置电话号码都会创建新的PhoneNumbers但不删除旧的.没有其他实体引用电话号码,我甚至没有在我的dbcontext上公开它,有没有办法告诉EF 完全Customer拥有PhoneNumbers,因此如果从集合中删除了电话号码,他们应该被删除?

证明

我意识到有十几种方法来解决这个问题,但这不是一个奇怪的边缘情况,处理这个问题的"正确"方法是什么.

c# mapping orm entity-framework entity-framework-6

11
推荐指数
1
解决办法
6286
查看次数

如何在没有公共构造函数的情况下模拟/伪造/存根密封OracleException?

在我的测试中,我需要测试抛出OracleException时会发生什么(由于存储过程失败).我正在尝试设置Rhino Mocks

Expect.Call(....).Throw(new OracleException());
Run Code Online (Sandbox Code Playgroud)

无论出于何种原因,OracleException似乎都没有公共构造函数.我该怎么做才能测试这个?

编辑:这正是我想要实例化的内容:

public sealed class OracleException : DbException {
  private OracleException(string message, int code) { ...}
}
Run Code Online (Sandbox Code Playgroud)

.net c# oracle mocking oracleclient

10
推荐指数
3
解决办法
2452
查看次数

数据访问层应该如何构建?

我最初按照此代码项目文章中概述的s#体系结构示例设计了我的系统(不幸的是,我没有使用NHibernate).基本思想是,对于需要与持久层进行通信的每个域对象,您将在不同的库中具有相应的数据访问对象.每个数据访问对象都实现一个接口,当域对象需要访问数据访问方法时,它始终对接口进行编码,而不是对DAO本身进行编码.

当时,我仍然认为这种设计非常灵活.但是,随着我的域模型中对象数量的增加,我发现自己在质疑这里是否存在组织问题.例如,域中的几乎每个对象都以相应的数据访问对象和数据访问对象接口结束.不仅如此,但如果我想做一些简单的事情,比如转移一些命名空间,那么这些中的每一个都处于一个更难以维护的地方.

有趣的是,许多这些DAO(及其相应的接口)都是非常简单的生物 - 最常见的只有一个GetById()方法.我最终得到了一大堆对象,比如

public interface ICustomerDao {
  Customer GetById(int id);
}

public interface IProductDao {
  Product GetById(int id);
}
public interface IAutomaticWeaselDao {
  AutomaticWeasel GetById(int id);
}
Run Code Online (Sandbox Code Playgroud)

他们的实现者通常也非常琐碎.这让我想知道走向不同的方向是不是更简单,也许通过为简单的数据访问任务设置单个对象来切换我的策略,并为那些需要更多东西的人保留专用数据访问对象的创建复杂.

public interface SimpleObjectRepository {
      Customer GetCustomerById(int id);
      Product GetProductById(int id);
      AutomaticWeasel GetAutomaticWeaselById(int id);
      Transaction GetTransactioinById(int id);
}
public interface TransactionDao {
  Transaction[] GetAllCurrentlyOngoingTransactionsInitiatedByASweatyGuyNamedCarl();
}
Run Code Online (Sandbox Code Playgroud)

有没有人有这样的架构的经验?总的来说,我对设置非常满意,因为现在我唯一担心的是管理所有这些小文件.我仍然想知道存在什么其他方法来构建数据访问层.

architecture data-access-layer

10
推荐指数
1
解决办法
3878
查看次数

如何对内部使用计时器的类进行单元测试?

无论喜欢与否,偶尔你必须为内部使用计时器的类编写测试.

比如说一个类,它接收系统可用性的报告,并在系统停机时间过长时引发事件

public class SystemAvailabilityMonitor {
    public event Action SystemBecameUnavailable = delegate { };
    public event Action SystemBecameAvailable = delegate { };
    public void SystemUnavailable() {
        //..
    }
    public void SystemAvailable() {
        //..
    }
    public SystemAvailabilityMonitor(TimeSpan bufferBeforeRaisingEvent) {
        //..
    }
}
Run Code Online (Sandbox Code Playgroud)

我使用了一些技巧(将这些作为答案发布)但我不知道其他人做了什么,因为我对我的任何一种方法都不满意.

.net testing unit-testing timer

10
推荐指数
2
解决办法
4465
查看次数

打开通用接口类型的open实现不等于接口类型?

这是一个测试,在我看来应该通过,但不是.

[TestMethod]
public void can_get_open_generic_interface_off_of_implementor()
{
    typeof(OpenGenericWithOpenService<>).GetInterfaces().First()
        .ShouldEqual(typeof(IGenericService<>));
}
public interface IGenericService<T> { }
public class OpenGenericWithOpenService<T> : IGenericService<T> { }
Run Code Online (Sandbox Code Playgroud)
  1. 为什么这不通过?
  2. 鉴于Type t = typeof(OpenGenericWithOpenService<>)我如何获得typeof(IGenericService <>)?

我一般很好奇,但是如果你想知道我在做什么,我正在编写一个Structuremap约定,它将类实现的所有接口转发给实现(作为单例).

.net c# generics reflection

10
推荐指数
1
解决办法
1211
查看次数

如何切换到旧版本的ruby/rails环境?

我正在努力与Tekpub一起建立你自己的博客在rails screencast上.我仍然是一个红宝石新手,问题是我安装了Rails 3而Rob使用的是旧版本(我的头顶版本:版本2.3.2).

我知道如何获得该版本的rails,gem install rails --version=2.3.2但当我键入rails new应用程序的版本是rails 3.如何使这个特定的应用程序与旧版本一起使用?我知道这与rvm有关但我不知道如何做除了基本rvm use操作之外的任何事情.

ruby environment ruby-on-rails rvm

10
推荐指数
1
解决办法
2万
查看次数

是否可以在github上"标记"项目?

我在github上发布了一个javascript网格项目,但既不搜索'javascript'也不搜索'grid',也不搜索'javascript grid'返回任何内容.有没有办法创建一组标签来指示项目的内容?

github

10
推荐指数
1
解决办法
4503
查看次数

runas.exe 和 Start-Process -Credential 的区别

我正在尝试在客户端网络上的 vpn 上设置一些脚本。该客户端通常会在其网络上分配一个 ActiveDirectory 帐户,并使用它来管理权限(例如,对数据库)。好吧,这是有道理的。

但有一点让我感到困惑:

start-process runas.exe "/user:CLIENTDOMAIN\George.Mauer /netonly W:\tools\LINQPad4\LINQPad.exe
Run Code Online (Sandbox Code Playgroud)

查询密码并运行良好(我可以访问数据库)

Start-Process W:\tools\LINQPad4\LINQPad.exe -Credential (Get-Credential)
Run Code Online (Sandbox Code Playgroud)

CLIENTDOMAIN\George.Mauer在弹出提示中输入和我的密码总是会导致错误

Start-Process : This command cannot be run due to the error: The user name or password is incorrect.
Run Code Online (Sandbox Code Playgroud)

这些不是一回事吗?runas和 和有-Credential什么区别?还有一个次要问题 - 我如何Start-Job使用我的CLIENTDOMAIN\George.Mauer凭证?

powershell active-directory

10
推荐指数
1
解决办法
1万
查看次数

devcon disable无法禁用未找到的设备

我在Windows 8.1上试图以编程方式禁用我的Clickpad.我已经安装了正确的x64位版本的devcon,如下所示.我可以找到正确的设备,但devcon disable相同的参数失败.

PS C:\...\7600.16385.win7_wdk.100208-1538\tools\devcon\amd64> .\devcon.exe disable 'ACPI\SYN1ECA*'
ACPI\SYN1ECA\4&22077A96&0                                   : Disable failed
No matching devices found.
Run Code Online (Sandbox Code Playgroud)

这是相当混乱的.它显然找到了正确的设备,但随后报告"找不到匹配的设备".有没有搞错?

请注意,我知道这个类似的问题但是,除了没有接受的答案之外,该问题有不同的错误,可能使用了错误版本的devcon.

windows device devcon

10
推荐指数
2
解决办法
1万
查看次数