实体框架-添加对抽象导航属性的引用而不加载

本文关键字:引用 加载 属性 导航 框架 添加 抽象 实体 | 更新日期: 2023-09-27 17:58:02

添加对非抽象导航属性的引用是可以的:

class Entity {
    int Id { get; set; }
    Reference Reference { get; set; }
    Parent Other { get; set; }
}
class Reference {
    int Id { get; set; }
}
abstract class Parent {
    int Id { get; set; }
}
class Child : Parent { }
async Task DbMethod() {
    using(var context = new XYZDbContext()) {
        var reference = new Reference { Id = 6 };
        context.Attach(reference);
        var entity = new Entity {
            Id = 3,
            Reference = reference,
        };
        context.Add(entity);
        await context.SaveChangesAsync();
    }
}

但是,如果我想将Other属性设置为现有记录(比如id 42),我就不能像实例化Reference类那样实例化Parent类(因为它是抽象的)。

如何为抽象Parent类添加对现有实体的引用?我想我可以向Entity类添加一个OtherId属性并进行设置,但如果可能的话,我希望避免污染实体

实体框架-添加对抽象导航属性的引用而不加载

为什么不将抽象类更改为非抽象类

class Parent {
    int Id { get; set; }
}

所以你现在可以实例化它,行为是一样的。你的抽象类并不是以你的例子为基础的抽象类。