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
。您应该将它们分离,将促销点指向产品和商店(如果您想要商店特定促销)...意味着 Product
和 Store
应该是 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.Store
和 Product.Store1
将只是返回其商店的导航属性。
我正在使用以下几个实体:
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
。您应该将它们分离,将促销点指向产品和商店(如果您想要商店特定促销)...意味着 Product
和 Store
应该是 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.Store
和 Product.Store1
将只是返回其商店的导航属性。