gpt4 book ai didi

entity-framework-core - Entity Framework 核心一对一关系在 SQL Server 中生成一对多

转载 作者:行者123 更新时间:2023-12-04 02:12:26 25 4
gpt4 key购买 nike

对于基于本教程的 Entity Framework 核心(rc1 或 rc2)中的一对一关系 http://ef.readthedocs.io/en/latest/modeling/relationships.html#one-to-one ,我使用这段代码:

public class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<BlogImage> BlogImages { get; set; }

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Blog>()
.HasOne(p => p.BlogImage)
.WithOne(i => i.Blog)
.HasForeignKey<BlogImage>(b => b.BlogForeignKey);
}
}

public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }

public BlogImage BlogImage { get; set; }
}

public class BlogImage
{
public int BlogImageId { get; set; }
public byte[] Image { get; set; }
public string Caption { get; set; }

public int BlogForeignKey { get; set; }
public Blog Blog { get; set; }
}

但是在运行迁移并检查数据库后,我注意到生成的表具有以下关系:

enter image description here

什么是解决方案?

最佳答案

您的代码看起来不错,实际上您在 BlogBlogImage 对象之间创建了 1:1 的关系,EF Core 通过允许您拥有双向这两个对象之间的关联。

唯一的问题是 EF Core 未能通过在 BlogForeignKey 列上创建唯一约束将此一对一关联转换为数据库,因此您有一个对象模型中的一对一关联映射到数据库中的一对多关系。

这是一个 Bug in EF Core 这将在最终版本中修复。

现在如果你想创建一个 Shared Primary Key Association 然后@Gert 提供的答案是可行的方法,但如果您的意图是在唯一外键(即 BlogForeignKey)或基本上是 One-to-One Foreign Key Association 上创建一对一关联。然后不要更改您的代码,只需在 BlogForeignKey 列上手动创建一个唯一约束并等待 RTM 版本即 scheduled这个月底出来。

关于entity-framework-core - Entity Framework 核心一对一关系在 SQL Server 中生成一对多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37536637/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com