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.)

我想为每一行实体有许多名称(别名)并将其存储在另一个表中。我创建了新的实体名称并接下来配置 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);

它创建了一个看起来像这样的表:

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

(我可以如何避免许多 _Ids 吗?)

当我尝试设置级联删除时,它会抛出异常“。可能导致循环或多个级联路径”。

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

使用实体框架执行此操作的最佳方法是什么?

4

1 回答 1

1

更好的解决方案可能是为每个需要多个名称的实体设置一个不同的“名称”实体。这将在数​​据库级别产生真正的一对多映射,但每个映射都需要一个单独的表。它还应该防止级联问题。

于 2013-03-12T17:58:50.463 回答