C# 如何通过OnModelCreating方法动态创建外键
在我的EF6模型上,我创建了某些基类,这些基类包含我希望跨多个实体继承的属性/列 以下是该概念的一个简单示例:C# 如何通过OnModelCreating方法动态创建外键,c#,entity-framework,C#,Entity Framework,在我的EF6模型上,我创建了某些基类,这些基类包含我希望跨多个实体继承的属性/列 以下是该概念的一个简单示例: public class Replaceable { [Column("REPLACING")] public int Replacing { get; set; } } [Table("PARTS")] public class Part : Replaceable { [Column("ID"), Key] public int Id { get
public class Replaceable
{
[Column("REPLACING")]
public int Replacing { get; set; }
}
[Table("PARTS")]
public class Part : Replaceable
{
[Column("ID"), Key]
public int Id { get; set; }
[Column("PART_NUMBER")]
public string PartNumber { get; set; }
}
因此,“替换属性”列将继承到零件类/零件表
替换列应该指向同一表中的ID。例如,如果您更换了一个零件,您希望跟踪更换的零件
如果可能的话,我想通过OnModelCreating
做的是:
- 获取从可替换对象继承的所有实体
- 将列标记为外键,并将其指向实体的主键(PART_ID、COMPONENT_ID等)
这可能吗?也欢迎另一种做法 您可以使用基本配置类:
public abstract class ReplaceableConfiguration<T> : EntityTypeConfiguration<T>
where T : Replaceable
{
public ReplaceableConfiguration()
{
this.Property(r => r.Replacing).HasColumnName(typeof(T).Name + "_ID");
}
}
这给了我这个DDL:
创建表[dbo].[PARTS](
[ID][int]不是空标识,
[零件编号][nvarchar](最大值),
[Part_ID][int]不为空,
约束[PK_dbo.PARTS]主键([ID])
)
创建表[dbo]。[COMPONENTS](
[ID][int]不是空标识,
[部件编号][nvarchar](最大值),
[Component_ID][int]不为空,
约束[PK_dbo.COMPONENTS]主键([ID])
)
也许可以创建您自己的属性并将其添加到您想要使用的属性中,然后使用反射将其拉出?@DavidG:好的,这是一个选项。我已经做了类似的事情来设置十进制精度。您能否设置一个示例,在获取属性后,您可以拉出每个类的主键?
public class PartConfiguration : ReplaceableConfiguration<Part>
{ }
public class ComponentConfiguration : ReplaceableConfiguration<Component>
{ }
modelBuilder.Configurations.Add(new PartConfiguration());
modelBuilder.Configurations.Add(new ComponentConfiguration());