我正在尝试将Entity Framework Core映射到使用代理/自然键设计的现有数据库。例如我有一个表定义如下:
CREATE TABLE tb_example (
_id INT IDENTITY(1,1),
name VARCHAR(255),
title NVARCHAR(MAX),
CONSTRAINT ak_example_name UNIQUE (name),
CONSTRAINT pk_example_id PRIMARY KEY (_id)
);
其中_id
是代理键,name
是表的自然键。
OnModelCreating中的一个简单实现如下所示:
modelBuilder.Entity<TbExample>(entity =>
{
entity.ToTable("tb_example");
entity.HasAlternateKey(e => e.Name);
entity.HasKey(e => e.Id);
}
现在,除了简单地在.where
子句中显式使用替代键之外,我似乎无法强迫EF Core对替代(即自然)键做任何有用的事情:它坚持使用(不需要的替代项) ).Find()
中的主键,使其对于搜索或缓存毫无用处。
我可以通过向EF Core撒谎解决有关哪个索引是OnModelCreating
中的主键的问题,但这似乎将来会困扰我。