EF 6 检索子自动生成的外键的父级

EF 6 Retrieve parent for child autogenerated foreign key

我正在使用以下几个实体:

public class Store {
    public int Id { get; set; }
    public virtual ICollection<Product> Products { get; set; }
    public virtual ICollection<Promotion> Promotions { get; set; }
}

public class Product {
    [product properties here...]
}

public class Promotion : Product {
    [extra promotion properties here...]
}

通过使用 Code First,它生成了我的数据库。它生成了一个 Products table,带有一个鉴别器(为了区分它存储的是哪种类型的 class),然后是一个 Store_Id 外键,当它是一个 Product 和另一个时填充Store_Id使用促销时使用的 1 个。

现在,一段时间后,我需要从特定的促销活动访问商店。如何做呢?我尝试使用 Fluent 并告诉它有关外键的信息,但我失败了。

你们能给我一些启发吗?

谢谢,

我相信您的建模可以改进...Promotion 不应扩展 Product。您应该将它们分离,将促销点指向产品和商店(如果您想要商店特定促销)...意味着 ProductStore 应该是 Promotion 中的一个字段实体...再扩展一点,想象一下如果您希望一次促销涉及多个产品(例如:肥皂和洗发水、运行 运动鞋和袜子等...)会是什么样子...)

这不就是简单的多对一关系吗?

public int StoreID { get; set; }
public virtual Store Store { get; set; }
public int Store1ID { get; set; }
public virtual Store Store1 { get; set; }

modelBuilder.Entity<Store>()
            .HasMany(m => m.Products)
            .WithRequired(m => m.Store);

modelBuilder.Entity<Store>()
            .HasMany(m => m.Promotions)
            .WithRequired(m => m.Store1);

Product.StoreProduct.Store1 将只是返回其商店的导航属性。