0

相互に関連するエンティティはほとんどありません(サンプルのみ):

------User----------
->(One) Type
->(One) Company
-   Name

------Type----------
->(Many) User
-   Name

------Job------------
->(Many) User
->(Many) Type
-   Name

------Company-----
->(Many) Users
->(Many) Job
-   Name

(Name it's just a text.)

そして、エンティティの各行に多くの名前(エイリアス)を設定し、それを他の1つのテーブルに格納したいと思います。新しいエンティティ名を作成し、次にEFを構成しました。

modelBuilder.Entity<User>().HasMany(e => et.Names);
modelBuilder.Entity<Type>().HasMany(e => et.Names);
modelBuilder.Entity<Job>().HasMany(e => et.Names);
modelBuilder.Entity<Company>().HasMany(e => et.Names);

これは、次のように見える1つのテーブルを作成します。

[Id],
[Name],
[User_Id],
[Type_Id],
[Job_Id],
[Company_Id]

(どうすれば多くの_Idを無効にすることができますか?)

また、カスケード削除を設定しようとすると、「。サイクルまたは複数のカスケードパスが発生する可能性があります」という例外がスローされます。

    modelBuilder.Entity<User>()
                .HasMany(pt => pt.Names)
                .WithOptional()
                .WillCascadeOnDelete(true);

エンティティフレームワークを使用してこれを行うための最良の方法は何ですか?

4

1 に答える 1

1

より良い解決策は、多くの名前を必要とするエンティティごとに個別の「名前」エンティティを用意することです。これにより、データベースレベルで真の1対多のマッピングが実現しますが、それぞれに個別のテーブルが必要になります。また、カスケードの問題を防ぐ必要があります。

于 2013-03-12T17:58:50.463 に答える