实体框架 - 在不加载的情况下添加对抽象导航属性的引用

时间:2016-07-21 04:36:52

标签: c# entity-framework-core

添加对非抽象导航属性的引用很好:

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),我就无法实例化Parent类(因为它是抽象的)我使用Reference类。

如何为抽象Parent类添加对现有实体的引用?我想我可以在OtherId类中添加Entity属性并设置它,但我希望尽可能避免污染实体

1 个答案:

答案 0 :(得分:0)

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

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

因此,您现在可以实例化它并且行为是相同的。 根据您的示例,您的抽象类不是一个抽象类。