我正在使用 C# 和 .NET Framework 4.7 将 Entity Framework 6.1.3 Code First 库迁移到 Entity Framework Core。
我一直在用 Google 搜索 Entity Framework Core,但没有找到很多关于它的信息,所以我尝试自己做。
在实体框架 6.1.3 上我有这个配置类:
using System.Data.Entity.ModelConfiguration;
namespace MyProject.Data.SqlServer.Configurations
{
class AggregationChildrenConfiguration : EntityTypeConfiguration<AggregationChildren>
{
public AggregationChildrenConfiguration()
{
HasKey(ag_ch => ag_ch.AggregationChildrenId);
HasRequired(ag_ch => ag_ch.Aggregation)
.WithMany(ag => ag.AggregationChildren)
.HasForeignKey(ag_ch => ag_ch.AggregationId);
HasRequired(ag_ch => ag_ch.Code)
.WithOptional(c => c.AggregationChild)
.WillCascadeOnDelete(false);
}
}
}
我已经迁移到这个:
using DataLibrary;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
namespace BusinessLibrary.Configurations
{
class AggregationChildrenConfiguration : IEntityTypeConfiguration<AggregationChildren>
{
public void Configure(EntityTypeBuilder<AggregationChildren> builder)
{
builder.HasKey(ag_ch => ag_ch.AggregationChildrenId);
builder.HasRequired(ag_ch => ag_ch.Aggregation)
.WithMany(ag => ag.AggregationChildren)
.HasForeignKey(ag_ch => ag_ch.AggregationId);
builder.HasRequired(ag_ch => ag_ch.Code)
.WithOptional(c => c.AggregationChild)
.WillCascadeOnDelete(false);
}
}
}
但builder还没有HasRequired
方法,我认为其他方法WithOptional
, WithMany
and WillCascadeOnDelete
either.
我已经迁移到这个,但我不确定它是否正确:
using DataLibrary;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
using System;
namespace BusinessLibrary.Configurations
{
class AggregationChildrenConfiguration : IEntityTypeConfiguration<AggregationChildren>
{
public void Configure(EntityTypeBuilder<AggregationChildren> builder)
{
builder.HasKey(ag_ch => ag_ch.AggregationChildrenId);
builder.HasOne(ag_ch => ag_ch.Aggregation)
.WithMany(ag => ag.AggregationChildren)
.HasForeignKey(ag_ch => ag_ch.AggregationId)
.IsRequired();
builder.HasOne(ag_ch => ag_ch.Code)
.WithOne(c => c.AggregationChild)
.OnDelete(DeleteBehavior.SetNull);
}
我一直在检查实体类型生成器 https://learn.microsoft.com/en-us/ef/core/api/microsoft.entityframeworkcore.metadata.builders.entitytypebuilder文档,但我不知道我必须使用哪些方法,或者这是否是迁移到 Entity Framework Core 的正确方法。
这种关系不是一对零:
builder.HasOne(ag_ch => ag_ch.Code)
.WithOne(c => c.AggregationChild)
.OnDelete(DeleteBehavior.SetNull);
In this 所以答案 https://stackoverflow.com/a/38513960/68571说我必须将foreignkey设置为null它会将其设置为可选,但我无法设置Code.CodeId
可以为空。