实体框架 - 外键映射 - 模型绑定 [英] Entity Framework - Foreign Key Mapping - Model Binding

查看:123
本文介绍了实体框架 - 外键映射 - 模型绑定的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前有一个EF上下文。在我的数据库模式中,我有以下情况。



两个表,TableA和TableB



表格定义如下:

  TableA(A_ID,name,description)
TableB(B_ID,C_ID,name,description)
/ pre>

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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆