实体框架 - 外键映射 - 模型绑定 [英] Entity Framework - Foreign Key Mapping - Model Binding
问题描述
两个表,TableA和TableB
表格定义如下:
TableA(A_ID,name,description)
/ pre>
TableB(B_ID,C_ID,name,description)
TableA和TableB之间的关系使得B_ID和C_ID都是FK到A_ID。
如何通过设置我的ModelBinder(Fluent API)或注释来在EF中实现此行为。提前致谢。
解决方案我有解决方案,但只有当您通过在TableB实体中添加TableA虚拟支持小修改您的权限。
示例:public class TableB
{
...
public虚拟TableA B {get;组; }
public virtual TableA C {get;组; }
...
}
然后在上下文中覆盖OnModelCreating您可以使用HasOptional而不是HasRequired):
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity< TableB>()
.HasRequired(x => xB)
.WithMany()
.HasForeignKey(x => x.B_ID).WillCascadeOnDelete假);
modelBuilder.Entity< TableB>()
.HasRequired(x => xC)
.WithMany()
.HasForeignKey(x => C_ID).WillCascadeOnDelete(假);
base.OnModelCreating(modelBuilder);
}
还有一件事。我不清楚使用我的解决方案为您的B_ID主键。在我的项目中,我有一个不同的PKId。
I currently have a EF Context. In my database schema I have the following scenario.
Two Tables, TableA and TableB
Tables are defined as follows:
TableA ( A_ID, name, description) TableB ( B_ID, C_ID, name, description)
The relationship between TableA and TableB is such that B_ID and C_ID are both FK's to A_ID.
How do I achieve this behaviour in EF by setting up either my ModelBinder (Fluent API) or by annotations. Thanks in advance.
解决方案I have solution, but only if You little modify Your entitites by added TableA virtual prop in TableB entity. Example:
public class TableB { ... public virtual TableA B { get; set; } public virtual TableA C { get; set; } ... }
Then override "OnModelCreating" in context (you may use "HasOptional" instead "HasRequired"):
protected override void OnModelCreating(DbModelBuilder modelBuilder) { modelBuilder.Entity<TableB>() .HasRequired(x => x.B) .WithMany() .HasForeignKey(x => x.B_ID).WillCascadeOnDelete(false); modelBuilder.Entity<TableB>() .HasRequired(x => x.C) .WithMany() .HasForeignKey(x => x.C_ID).WillCascadeOnDelete(false); base.OnModelCreating(modelBuilder); }
And one more thing. I do not know how well using my solution for Your "B_ID" primary key. In my project I have a different PK "Id".
这篇关于实体框架 - 外键映射 - 模型绑定的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!