pge*_*hev 1 c# database entity-framework-6
我有两个实体如下:
public class FirstEntity
{
public int Id { get; set; }
public ICollection<SecondEntity> SecondEntityCollection { get; set; }
}
public class SecondEntity
{
[Key]
[Column(Order = 0)]
public int FirstEntitySomeId { get; set; }
[Key]
[Column(Order = 1)]
public int SecondEntityId { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
我想SecondEntity使用 EF6生成要添加到数据库的迁移。问题是 EF 生成迁移如下:
CreateTable("dbo.SecondEntity",
c => new
{
SecondEntityId = c.Int(nullable: false),
FirstEntitySomeId = c.Int(nullable: false),
FirstEntity_Id = c.Int(),
})
.PrimaryKey(t => new {t.SecondEntityId, t.FirstEntitySomeId})
.ForeignKey("dbo.FirstEntity", t => t.FirstEntity_Id)
.Index(t => t.FirstEntity_Id);
Run Code Online (Sandbox Code Playgroud)
它会自动生成一个新列FirstEntity_Id作为外键,因为FirstEntitySomeId它不遵循约定(我想保持这个名称)。
如何强制 EF 不生成新列而是FirstEntitySomeId用作 FK?请注意,该关系是单向的。SecondEntity不包含类型的导航属性FirstEntity(它不应该)。
使用流畅的映射,您可以执行以下操作:
modelBuilder.Entity<FirstEntity>()
.HasMany(m => m.SecondEntityCollection)
.WithRequired()
.HasForeignKey(m => m.FirstEntitySomeId);
Run Code Online (Sandbox Code Playgroud)
如果您使用的是属性,则可以这样设置外键:
public class FirstEntity
{
public int Id { get; set; }
[ForeignKey("FirstEntitySomeId")]
public ICollection<SecondEntity> SecondEntityCollection { get; set; }
}
Run Code Online (Sandbox Code Playgroud)