0

似乎实体框架有一些约定来处理一对一的关系。

我正在使用 Fluent API,我需要我的子实体拥有 PK 和 FK。

是否可以不使用 [ForeignKey] 属性?

4

1 回答 1

0

考虑以下示例:

public class Principal
{
    public int Id { get; set; }
    public Dependent Dependent { get; set; }
}

public class Dependent
{
    public int Id { get; set; }
    public Principal Principal { get; set; }
}

要使用Fluent API将'属性配置为Dependent'Id属性的外键,您可以选择以下选项之一:PrincipalId

1) 开头Entity<Dependent>

public class AppDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Dependent>().HasRequired(d => d.Principal).WithOptional(p => p.Dependent);
    }
}

2)从Entity<Principal>

public class AppDbContext : DbContext
{
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {             
        modelBuilder.Entity<Principal>().HasOptional(p => p.Dependent).WithRequired(d => d.Principal);
    }
}

它们都将导致以下代码优先迁移:

CreateTable(
    "dbo.Principals",
    c => new
        {
            Id = c.Int(nullable: false, identity: true),
        })
    .PrimaryKey(t => t.Id);

CreateTable(
    "dbo.Dependents",
    c => new
        {
            Id = c.Int(nullable: false),
        })
    .PrimaryKey(t => t.Id)
    .ForeignKey("dbo.Principals", t => t.Id)
    .Index(t => t.Id);

其中Dependent' 的Id属性被配置为 PK 和 FK 到Principal' 的Id属性。

于 2015-01-29T19:14:25.580 回答