似乎实体框架有一些约定来处理一对一的关系。
我正在使用 Fluent API,我需要我的子实体拥有 PK 和 FK。
是否可以不使用 [ForeignKey] 属性?
似乎实体框架有一些约定来处理一对一的关系。
我正在使用 Fluent API,我需要我的子实体拥有 PK 和 FK。
是否可以不使用 [ForeignKey] 属性?
考虑以下示例:
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
属性的外键,您可以选择以下选项之一:Principal
Id
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
属性。