将EF Core与代理键和自然键一起使用

时间:2019-06-18 06:41:35

标签: sql entity-framework .net-core

我正在尝试将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中的主键的问题,但这似乎将来会困扰我。

0 个答案:

没有答案