我们有一个大型现有数据库,几乎完全使用复合主键和外键。我们的任务是编写一个与该数据库(在 SQL Server 2012 上)对话的大型 C# 应用程序。
我们正在考虑使用 ORM,但我所知道的大多数 ORM 似乎不鼓励(或明确不支持)使用复合键(例如NHibernate、Massive、PetaPoco等)。
性能和吞吐量对于此应用程序很重要。
哪些 ORM(如果有)对复合键有很好的支持,并且启动性能很好?你会推荐哪个?
我们有一个大型现有数据库,几乎完全使用复合主键和外键。我们的任务是编写一个与该数据库(在 SQL Server 2012 上)对话的大型 C# 应用程序。
我们正在考虑使用 ORM,但我所知道的大多数 ORM 似乎不鼓励(或明确不支持)使用复合键(例如NHibernate、Massive、PetaPoco等)。
性能和吞吐量对于此应用程序很重要。
哪些 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 中的复合键有什么不好的地方:
我不知道 EF 和复合键的任何性能问题。我相信,这是数据库引擎的责任。