我们有一个现有的大型数据库,它几乎只使用复合主键和外键。我们的任务是编写一个与该数据库对话的大型C#应用程序(在SQL Server 2012上)。
我们正在考虑使用ORM,但我所知道的大多数ORM似乎都不鼓励(或明显不支持)使用复合键(例如NHibernate,Massive,{{3}等等)。
性能和吞吐量对此应用程序非常重要。
什么ORM(如果有的话)对复合键有很好的支持,并且具有良好的启动性能?你会推荐哪一个?
答案 0 :(得分:1)
实体框架支持复合键。例如,这是一个具有复合键的实体:
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; }
}
... Code First方法的配置,使用流畅的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和复合键的任何性能问题。我相信,这是数据库引擎的责任。