EFCoreを使用して1対1リレーションの移行を生成中にエラーが発生しました

ヴァヒド・ファラマンディアン

私は以下の2つのモデルを持っています:

public class Person{

   public virtual int Id { get; set; }
   public virtual int BaseId { get; set; }
   public virtual string Name { get; set; }
   public virtual Employee Employee { get; set; }
}

public class Employee{

   public virtual int Id { get; set; }
   public virtual string Code{ get; set; }
   public virtual Person Person { get; set; }
}

すべてEmployeeがですが、必ずしもPersonすべてPersonがであるとは限りませんEmployeeこれら2つの関係は、1対1の関係のタイプですが、非主キー列(Person.BaseId)と目的の外部キー列(Employee.Id)の間でこの関係を作成する必要がありますモデルIdEmployeeは、主キーと外部キーの列です。

私はこのマッピング構成を持っています:

 public override void Configure(EntityTypeBuilder<Person> builder)
    {
        builder.HasKey(x => x.Id);
        builder.ToTable("tblPeople", "dbo");

        builder
            .HasOne(p => p.Employee)
            .WithOne(p => p.Person)
            .HasForeignKey<Employee>(p => p.Id)
            .HasPrincipalKey<Person>(p => p.BaseId);
    } 

  public override void Configure(EntityTypeBuilder<Employee> builder)
    {
        builder.HasKey(x => x.Id);
        builder.ToTable("tblEmployees", "dbo");
    }

移行を生成しようとすると、次のエラーが発生します。

'Employee.Person'と 'Person.Employee'の間の1対1の関係について、子/依存側を判別できませんでした。関係の子/依存側を識別するには、外部キープロパティを構成します。これらのナビゲーションを同じ関係の一部にすべきでない場合は、逆を指定せずに構成してください。詳細については、http://go.microsoft.com/fwlink/?LinkId = 724062参照してください。

私はしません。この問題を解決するために、データアノテーションのアプローチを使用します。

ヴァヒド・ファラマンディアン

私は解決策を見つけました、間違いは私のEntityTypeConfigurationクラスのデザインにありました。私は次のデザインを持っていました:簡単にするために、私はコードをトリミングしました

public abstract class BaseMap<T, U> : IEntityTypeConfiguration<T> where T: BaseEntity<U>
{
    public virtual void Configure(EntityTypeBuilder<T> builder)
    {
        builder.HasKey(x => x.Id);
    }
}

public abstract class ChildBaseMap<T, U> : BaseMap<T, U> where T: ChildBaseEntity<U>
{
    public virtual void Configure(EntityTypeBuilder<T> builder)//<== virtual is wrong here as I need to override the parent Configure
    {
        base.Configure(builder);

        builder.Property(x => x.BaseId).IsRequired();
    }
}

public class PersonMap : ChildBaseMap<Person, int>
{
    public override void Configure(EntityTypeBuilder<Person> builder)
    {
      ....

ただoverride、その代わりとしてそれを定義する設定方法virtualでのChildBaseMapクラスは、この問題を解決します!

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

移行を使用して列の名前を変更中にEFCore2.0エラーが発生しました

分類Dev

Facebook Graph APIを使用するとエラーが発生します-セッション:保留中のリクエストがあるセッションに対して新しい権限をリクエストしようとしました

分類Dev

データベースへの1対1のリレーションに移行を適用すると、EntityFrameworkによって生成された移行がクラッシュします

分類Dev

dapperで1対多の関係を使用しているときにsplitOnエラーが発生しました

分類Dev

Androidアプリケーションの実行中にエラーが発生しました-OpenglESエミュレーションを初期化できませんでした。「-gpuoff」を使用して無効にしてください

分類Dev

コレクション「nosuchcmd:aggregate」の作成中にphpartisan移行エラーが発生しました

分類Dev

JaegerでJavaアプリケーションをトレース中にエラーが発生しました

分類Dev

vbaを使用して1つのシートから別のシートにデータをコピー中にエラーが発生しました

分類Dev

CloudFunctionを使用して別のコレクションドキュメントを更新中にエラーが発生しました

分類Dev

Launch4jを使用してスプラッシュスクリーンを追加すると、起動エラー(「アプリケーションの起動中にエラーが発生しました」)が発生します

分類Dev

ItextSharpを使用してPDFを生成中にエラーが発生しました

分類Dev

「cookies」アクションでコントローラーを生成中にエラーが発生しました

分類Dev

ResultSetを使用したデータのレンダリング中にエラーが発生しました

分類Dev

TomcatでWeldCDIを使用してJerseyを使用してアプリケーションをデプロイ中にエラーが発生しました

分類Dev

piobuildを使用してレコメンデーションエンジンをビルド中にエラーが発生しました--predictioでverbose

分類Dev

アプリケーションthread1の不正な命令を開いているときにエラーが発生しました

分類Dev

アプリケーションをホストしているdotnet.exeのプロセスIDを特定しようとしてエラーが発生しました。1つ以上のエラーが発生しました

分類Dev

コレクションに「パス」を使用中にエラーが発生しました:simple_form_for

分類Dev

ndkを使用してAndroidアプリケーションを開発中にエラーが発生しました

分類Dev

Windowsアプリケーションフォームの操作中に文字列を使用しようとしたときにエラーが発生しました

分類Dev

コレクションから単一の値を取得中にエラーが発生しました

分類Dev

mongoクライアントを非同期的に使用してmongoコレクションにアクセス中にエラーが発生しました

分類Dev

Androidで最新のGoogleドライブAPIへの移行中にエラーが発生しました-認証されていない使用の1日あたりの制限を超えました。継続使用にはサインアップが必要です

分類Dev

ExpressionTreeを使用した動的クエリの生成中にエラーが発生しました

分類Dev

CLIを使用したElasticBeanstalkへのフラスコアプリケーションのデプロイ中に502エラーが発生しました

分類Dev

mongodbのSpringデータを使用したSpringBoot:アプリケーションの読み込み中にエラーが発生しました

分類Dev

プログラムでサイトをテンプレートとして保存-一時ディレクトリにソリューションファイルを生成中にエラーが発生しました

分類Dev

Tastypieでリレーショナルデータを投稿中にエラーが発生しました

分類Dev

最新のFFmpegに対してguvcviewをコンパイル中にエラーが発生しました

Related 関連記事

  1. 1

    移行を使用して列の名前を変更中にEFCore2.0エラーが発生しました

  2. 2

    Facebook Graph APIを使用するとエラーが発生します-セッション:保留中のリクエストがあるセッションに対して新しい権限をリクエストしようとしました

  3. 3

    データベースへの1対1のリレーションに移行を適用すると、EntityFrameworkによって生成された移行がクラッシュします

  4. 4

    dapperで1対多の関係を使用しているときにsplitOnエラーが発生しました

  5. 5

    Androidアプリケーションの実行中にエラーが発生しました-OpenglESエミュレーションを初期化できませんでした。「-gpuoff」を使用して無効にしてください

  6. 6

    コレクション「nosuchcmd:aggregate」の作成中にphpartisan移行エラーが発生しました

  7. 7

    JaegerでJavaアプリケーションをトレース中にエラーが発生しました

  8. 8

    vbaを使用して1つのシートから別のシートにデータをコピー中にエラーが発生しました

  9. 9

    CloudFunctionを使用して別のコレクションドキュメントを更新中にエラーが発生しました

  10. 10

    Launch4jを使用してスプラッシュスクリーンを追加すると、起動エラー(「アプリケーションの起動中にエラーが発生しました」)が発生します

  11. 11

    ItextSharpを使用してPDFを生成中にエラーが発生しました

  12. 12

    「cookies」アクションでコントローラーを生成中にエラーが発生しました

  13. 13

    ResultSetを使用したデータのレンダリング中にエラーが発生しました

  14. 14

    TomcatでWeldCDIを使用してJerseyを使用してアプリケーションをデプロイ中にエラーが発生しました

  15. 15

    piobuildを使用してレコメンデーションエンジンをビルド中にエラーが発生しました--predictioでverbose

  16. 16

    アプリケーションthread1の不正な命令を開いているときにエラーが発生しました

  17. 17

    アプリケーションをホストしているdotnet.exeのプロセスIDを特定しようとしてエラーが発生しました。1つ以上のエラーが発生しました

  18. 18

    コレクションに「パス」を使用中にエラーが発生しました:simple_form_for

  19. 19

    ndkを使用してAndroidアプリケーションを開発中にエラーが発生しました

  20. 20

    Windowsアプリケーションフォームの操作中に文字列を使用しようとしたときにエラーが発生しました

  21. 21

    コレクションから単一の値を取得中にエラーが発生しました

  22. 22

    mongoクライアントを非同期的に使用してmongoコレクションにアクセス中にエラーが発生しました

  23. 23

    Androidで最新のGoogleドライブAPIへの移行中にエラーが発生しました-認証されていない使用の1日あたりの制限を超えました。継続使用にはサインアップが必要です

  24. 24

    ExpressionTreeを使用した動的クエリの生成中にエラーが発生しました

  25. 25

    CLIを使用したElasticBeanstalkへのフラスコアプリケーションのデプロイ中に502エラーが発生しました

  26. 26

    mongodbのSpringデータを使用したSpringBoot:アプリケーションの読み込み中にエラーが発生しました

  27. 27

    プログラムでサイトをテンプレートとして保存-一時ディレクトリにソリューションファイルを生成中にエラーが発生しました

  28. 28

    Tastypieでリレーショナルデータを投稿中にエラーが発生しました

  29. 29

    最新のFFmpegに対してguvcviewをコンパイル中にエラーが発生しました

ホットタグ

アーカイブ