我应该在两种配置中还是仅在一种配置中两次指定 EF Core 中的关系?
Should I specify a relationship in EF Core twice in both configurations or only in one?
我应该在两种配置中指定 EF Core 中的关系两次还是只在一种配置中指定?
例如我有这两个型号:
public class A
{
public int Id { get; set; }
public int BId { get; set; }
public B B { get; set; }
}
public class B
{
public int Id { get; set; }
public ICollection<A> As { get; set; }
}
我有配置:
public void Configure(EntityTypeBuilder<A> builder)
{
builder
.HasKey(a => new { a.Id, a.BId });
builder
.HasIndex(a => new { a.Id, a.BId })
.IsUnique()
.IsClustered();
builder
.HasOne(a => a.B)
.WithMany(b => b.As)
.HasForeignKey(a => a.BId)
.IsRequired(true);
}
我现在还应该添加:
public void Configure(EntityTypeBuilder<B> builder)
{
builder
.HasKey(b => b.Id);
builder
.HasIndex(b => b.Id)
.IsUnique()
.IsClustered();
builder
.HasMany(b => b.As)
.WithOne(a => a.B)
.HasForeignKey(a => a.BId)
.IsRequired(true);
}
或者第一个配置是否足够(因此第二个配置无效)?
我在网上实在找不到这个问题的答案,所以我希望这里有人现在可以。
不,你不应该。
一个配置绝对够用
请参阅以下文档 link(简单博客示例):
public class Blog
{
public int BlogId { get; set; }
public string Url { get; set; }
// Navigation properties
public List<Post> Posts { get; set; }
}
public class Post
{
public int PostId { get; set; }
public string Title { get; set; }
public string Content { get; set; }
// Navigation properties
public Blog Blog { get; set; }
}
public class MyContext : DbContext
{
public DbSet<Blog> Blogs { get; set; }
public DbSet<Post> Posts { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Post>()
.HasOne(p => p.Blog)
.WithMany(b => b.Posts);
}
}
如果您对显式配置不感兴趣,EfCore 有 4 个约定(无需配置)用于一对多关系。
以下link解释完整:
https://www.entityframeworktutorial.net/efcore/one-to-many-conventions-entity-framework-core.aspx
我应该在两种配置中指定 EF Core 中的关系两次还是只在一种配置中指定?
例如我有这两个型号:
public class A
{
public int Id { get; set; }
public int BId { get; set; }
public B B { get; set; }
}
public class B
{
public int Id { get; set; }
public ICollection<A> As { get; set; }
}
我有配置:
public void Configure(EntityTypeBuilder<A> builder)
{
builder
.HasKey(a => new { a.Id, a.BId });
builder
.HasIndex(a => new { a.Id, a.BId })
.IsUnique()
.IsClustered();
builder
.HasOne(a => a.B)
.WithMany(b => b.As)
.HasForeignKey(a => a.BId)
.IsRequired(true);
}
我现在还应该添加:
public void Configure(EntityTypeBuilder<B> builder)
{
builder
.HasKey(b => b.Id);
builder
.HasIndex(b => b.Id)
.IsUnique()
.IsClustered();
builder
.HasMany(b => b.As)
.WithOne(a => a.B)
.HasForeignKey(a => a.BId)
.IsRequired(true);
}
或者第一个配置是否足够(因此第二个配置无效)?
我在网上实在找不到这个问题的答案,所以我希望这里有人现在可以。
不,你不应该。
一个配置绝对够用
请参阅以下文档 link(简单博客示例):
public class Blog { public int BlogId { get; set; } public string Url { get; set; } // Navigation properties public List<Post> Posts { get; set; } } public class Post { public int PostId { get; set; } public string Title { get; set; } public string Content { get; set; } // Navigation properties public Blog Blog { get; set; } } public class MyContext : DbContext { public DbSet<Blog> Blogs { get; set; } public DbSet<Post> Posts { get; set; } protected override void OnModelCreating(ModelBuilder modelBuilder) { modelBuilder.Entity<Post>() .HasOne(p => p.Blog) .WithMany(b => b.Posts); } }
如果您对显式配置不感兴趣,EfCore 有 4 个约定(无需配置)用于一对多关系。 以下link解释完整:
https://www.entityframeworktutorial.net/efcore/one-to-many-conventions-entity-framework-core.aspx