如何才能正确设计与一个常见相关的几个不同实体(一个多个)的关系?

时间:2013-03-12 17:52:32

标签: entity-framework database-design

我几乎没有相互关联的实体(只是一个样本):

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

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

1 个答案:

答案 0 :(得分:1)

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