手动设置实体密钥,而无需访问数据库

本文关键字:访问 数据库 设置 实体 密钥 | 更新日期: 2023-09-27 18:31:16

在我的应用程序(数据库优先)中,主键始终由客户端创建,而不是由底层数据库创建。

在实体框架 v4 中,每个Entity都有其EntityKey可以手动设置的属性。

但是,我在 EF6 中找不到它了?

有什么具体原因吗?

我不想调用ctx.SaveChanges()只是为了设置一个Entity's密钥,因为这意味着对数据库的调用。

我也想知道为什么ObjectContext.CreateEntityKey不见了?!

手动设置实体密钥,而无需访问数据库

如果您使用的是 POCO 的 - 这是一个如何完成的示例

public class ChronosItem 
{
    [Column, Key, Required, MaxLength(26), DatabaseGenerated(DatabaseGeneratedOption.None)]
    public string Id { get;  set; }
    ....

如果您无法调整您的实体

覆盖您的上下文中的"OnModelCreateating"方法..像这样..

protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Entity<ChronosItem >()
                .HasKey(p => p.Id)
                .Property(p => p.Id)
                .HasDatabaseGeneratedOption(DatabaseGeneratedOption.None);