首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >EF忽略Fluent多对多配置

EF忽略Fluent多对多配置
EN

Stack Overflow用户
提问于 2017-03-22 18:05:42
回答 1查看 50关注 0票数 1

我的DbContext似乎忽略了特定实体的fluent配置。它在OUTER JOIN的子查询中生成表OUTER JOIN,而这显然是在fluent配置中指定的表。

Sql:

代码语言:javascript
复制
SELECT  Project1.Id AS Id
      , Project1.Name AS Name
      , Project1.GeographyCategoryId AS GeographyCategoryId
      , Project1.C1 AS C1
      , Project1.Id1 AS Id1
      , Project1.Name1 AS Name1
      , Project1.GeographyCategoryId1 AS GeographyCategoryId1
FROM    ( SELECT    Extent1.Id AS Id
                  , Extent1.Name AS Name
                  , Extent1.GeographyCategoryId AS GeographyCategoryId
                  , Join1.Id AS Id1
                  , Join1.Name AS Name1
                  , Join1.GeographyCategoryId AS GeographyCategoryId1
                  , CASE WHEN ( Join1.SubRegion_Id IS NULL ) THEN CAST(NULL AS INT)
                         ELSE 1
                    END AS C1
          FROM      dbo.Regions AS Extent1
          LEFT OUTER JOIN ( SELECT  Extent2.SubRegion_Id AS SubRegion_Id
                                  , Extent2.Region_Id AS Region_Id
                                  , Extent3.Id AS Id
                                  , Extent3.Name AS Name
                                  , Extent3.GeographyCategoryId AS GeographyCategoryId
                            FROM    dbo.SubRegionRegions AS Extent2
                            INNER JOIN dbo.SubRegions AS Extent3
                            ON      Extent3.Id = Extent2.SubRegion_Id ) AS Join1
          ON        Extent1.Id = Join1.Region_Id ) AS Project1
ORDER BY Project1.Id ASC
      , Project1.C1 ASC;

流畅配置:

代码语言:javascript
复制
modelBuilder
    .Entity<Region>()
    .HasMany(t => t.SubRegions)
    .WithMany(t => t.Regions)
    .Map(m =>
        {
            m.ToTable("RegionSubRegion", "dbo");
            m.MapLeftKey("RegionId");
            m.MapRightKey("SubRegionId");
        });

实体:

代码语言:javascript
复制
[Table("SubRegions", Schema = "dbo")]
public class SubRegion
{
    public SubRegion()
    {
    }

    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column(@"Id", Order = 1, TypeName = "int")]
    [Required]
    [Key]
    public int Id { get; set; }

    [Column(@"Name", Order = 2, TypeName = "varchar")]
    [Required]
    [MaxLength(50)]
    [StringLength(50)]
    public string Name { get; set; }

    [Column(@"GeographyCategoryId", Order = 3, TypeName = "int")]
    [Required]
    public int GeographyCategoryId { get; set; }

    [ForeignKey("GeographyCategoryId")]
    public virtual GeographyCategory GeographyCategory { get; set; }

    public virtual ICollection<Region> Regions { get; set; }
    public virtual ICollection<Territory> Territories { get; set; }
    public virtual ICollection<Employee> EmployeesResponsible { get; set; }
}

[Table("Regions", Schema = "dbo")]
public class Region
{
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    [Column(@"Id", Order = 1, TypeName = "int")]
    [Required]
    [Key]
    public int Id { get; set; }

    [Column(@"Name", Order = 2, TypeName = "varchar")]
    [Required]
    [MaxLength(50)]
    [StringLength(50)]
    public string Name { get; set; }

    [Column(@"GeographyCategoryId", Order = 3, TypeName = "int")]
    [Required]
    public int GeographyCategoryId { get; set; }

    [ForeignKey("GeographyCategoryId")]
    public virtual GeographyCategory GeographyCategory { get; set; }
    public virtual ICollection<SubRegion> SubRegions { get; set; }
    public virtual ICollection<Employee> EmployeesResponsible { get; set; }
}

表定义:

代码语言:javascript
复制
-- SubRegions

CREATE TABLE dbo.SubRegions
    (
      Id INT NOT NULL IDENTITY(1, 1) NOT FOR REPLICATION
    , Name VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
    , GeographyCategoryId INT NOT NULL
    )
ON  [PRIMARY];
GO
ALTER TABLE dbo.SubRegions ADD CONSTRAINT PK_SubRegions PRIMARY KEY CLUSTERED (Id) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
CREATE NONCLUSTERED INDEX IX_FK_GeographyCategorySubRegion ON dbo.SubRegions (GeographyCategoryId) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
ALTER TABLE dbo.SubRegions ADD CONSTRAINT FK_SubRegions_GeographyCategories FOREIGN KEY (GeographyCategoryId) REFERENCES dbo.GeographyCategories (Id);
GO


-- Regions

CREATE TABLE dbo.Regions
    (
      Id INT NOT NULL IDENTITY(1, 1) NOT FOR REPLICATION
    , Name VARCHAR(50) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL
    , GeographyCategoryId INT NOT NULL
    )
ON  [PRIMARY];
GO
ALTER TABLE dbo.Regions ADD CONSTRAINT PK_Regions PRIMARY KEY CLUSTERED (Id) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
CREATE NONCLUSTERED INDEX IX_FK_GeographyCategoryRegion ON dbo.Regions (GeographyCategoryId) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
ALTER TABLE dbo.Regions ADD CONSTRAINT FK_Regions_GeographyCategories FOREIGN KEY (GeographyCategoryId) REFERENCES dbo.GeographyCategories (Id);
GO

-- RegionSubRegions

CREATE TABLE dbo.RegionSubRegion
    (
      RegionId INT NOT NULL
    , SubRegionId INT NOT NULL
    )
ON  [PRIMARY];
GO
ALTER TABLE dbo.RegionSubRegion ADD CONSTRAINT PK_SubRegionRegion PRIMARY KEY NONCLUSTERED (SubRegionId, RegionId) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
CREATE NONCLUSTERED INDEX IX_FK_SubRegionRegion_Region ON dbo.RegionSubRegion (RegionId) WITH (FILLFACTOR=80) ON [PRIMARY];
GO
ALTER TABLE dbo.RegionSubRegion ADD CONSTRAINT FK_SubRegionRegion_Region FOREIGN KEY (RegionId) REFERENCES dbo.Regions (Id);
GO
ALTER TABLE dbo.RegionSubRegion ADD CONSTRAINT FK_SubRegionRegion_SubRegion FOREIGN KEY (SubRegionId) REFERENCES dbo.SubRegions (Id);
GO

它是根据惯例产生它自己的。为什么不在模型和配置中使用指定的列和表名?我遗漏了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-03-22 19:10:53

在尝试调试并逐步完成单元测试之后,我发现我的单元测试是针对错误/过时的引用程序集构建的。

更新参考资料解决了这个问题。

这么多小时。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42959497

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档