c# – Entity Framework可选:可选关系

前端之家收集整理的这篇文章主要介绍了c# – Entity Framework可选:可选关系前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试使用可选的:可选关系来设置实体框架模型:

在我的情况下,有时存在指向BaseTable记录的AdditionalData记录,但有时BaseTable或AdditionalData记录存在而没有任何链接. BaseTable的外键(如果存在)位于AdditionalData表上.

我希望能够在BaseTable和可能连接的任何AdditionalDatas之间来回导航.

  1. BaseTable 0..1 ----- 0..1 AdditionalData1
  2. \
  3. --- 0..1 AdditionalData2
  1. public class BaseTable {
  2. public int Id { get; set; }
  3. public virtual AdditionalType1 AdditionalType1 { get; set; }
  4. public virtual AdditionalType2 AdditionalType2 { get; set; }
  5. }
  6.  
  7. public class AdditionalType1 {
  8. public int Id { get; set; }
  9. public int? BaseTableId { get; set; }
  10. public virtual BaseTable BaseTable { get; set; }
  11. }
  12.  
  13. public class AdditionalType2 {
  14. public int Id { get; set; }
  15. public int? BaseTableId { get; set; }
  16. public virtual BaseTable BaseTable { get; set; }
  17. }

我该如何工作?我得到了:

  1. modelBuilder.Entity<AdditionalType1>()
  2. .HasOptional(zmt => zmt.BaseTable)
  3. .WithOptionalDependent(zm => zm.AdditionalType1)
  4. .Map(a => a.MapKey("BaseTableId"));
  5. modelBuilder.Entity<AdditionalType2>()
  6. .HasOptional(zmt => zmt.BaseTable)
  7. .WithOptionalDependent(zm => zm.AdditionalType2)
  8. .Map(a => a.MapKey("BaseTableId"));

但它告诉我这个:

error: (1564,6) : error 0019: Each property name in a type must be
unique. Property name ‘BaseTableId’ was already defined.

我不知道究竟是什么意思,也不确定如何修复.

编辑:如果我删除这里建议的Map / MapKey子句(https://stackoverflow.com/a/8016308/237091)我得到此错误,当一个查询运行使用它时:

Invalid column name ‘BaseTable_Id’
as it maps itself to BaseTable_Id automatically instead of my BaseTableId field.

解决方法

看起来你正在尝试从AdditionalType对象设置1:0..1关系(我可能完全误解了).

注:我认为您必须在BaseTable上持有BaseTableId才能使其工作(或定义主键):

如果BaseTableId是这个实例中的外键,我想这可能就是你所追求的:

  1. modelBuilder.Entity<AdditionalType1>()
  2. .HasOptional(zmt => zmt.BaseTable)
  3. .WithMany()
  4. .HasForeignKey(a => a.BaseTableId);

这是我之前使用过的,但不能承认完全理解它(.WithMany()让我兴奋);这个答案的文章中列出了一个小的解决方法Entity Framework 0..1 to 0 relation)

如果我完全错过了这一点,我会道歉.

猜你在找的C#相关文章