哪些.net orm对组合键有很好的支持

本文关键字:很好 支持 组合 net orm 哪些 | 更新日期: 2023-09-27 17:51:08

我们有一个大型的现有数据库,它几乎完全使用复合主键和外键。我们的任务是编写一个与这个数据库对话的大型c#应用程序(在SQL Server 2012上)。

我们正在考虑使用ORM,但是我所知道的大多数ORM似乎都不鼓励(或者干脆不支持)使用复合键(例如NHibernate, Massive, PetaPoco等)。

性能和吞吐量对这个应用程序很重要。

哪些orm(如果有的话)对组合键有很好的支持,并且有很好的性能引导?你有什么建议吗?

哪些.net orm对组合键有很好的支持

实体框架支持复合键。例如,这里有一个具有复合键的实体:

public class MyEntity
{
    public int NodeId { get; set; } // this is a part of entity key
    public int ItemId { get; set; } // this is a part of entity key
    public string Name { get; set; }
}

…它的配置代码优先的方法,使用流畅的API:

internal sealed class MyEntityConfiguration : EntityTypeConfiguration<MyEntity>
{
        public MyEntityConfiguration()
        {
            // this is a composite key configuration
            HasKey(_ => new { _.NodeId, _.ItemId });
            Property(_ => _.NodeId);
            Property(_ => _.ItemId);
            Property(_ => _.Name);
        }
}

…和查询样例:

context.MyEntities.SingleOrDefault(myEntity => myEntity.NodeId == 1 && myEntity.ItemId == 1);

EF中的组合键有什么不好:

  • 不能为key声明单独的类型。因此,如果您的键由三个属性组成,那么您将拥有三个属性,而不是一个键属性;
  • 你应该写你自己的修复代码来实现键的一致性,如果改变现有实体的键是允许的(你可以改变一个键的属性,而忘记另一个)。

我不知道EF和复合键有什么性能问题。我认为,这是数据库引擎的责任。