【问题标题】:EFs own and reverse POCO generator both skipping tablesEF 拥有和反向 POCO 生成器都跳过表
【发布时间】:2016-05-07 17:39:25
【问题描述】:

有一个奇怪的问题。

考虑下表(来自 SSMS 2014 的 SQL 创建脚本,所以我没有拼写错误!)

CREATE TABLE [dbo].[QuestionRangeGroup](
    [QuestionangeID] [int] NOT NULL,
    [QuestionID] [int] NOT NULL,
 CONSTRAINT [PK_QuestionRangeGroup] PRIMARY KEY CLUSTERED 
(
    [QuestionangeID] ASC,
    [QuestionID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]

GO

ALTER TABLE [dbo].[QuestionRangeGroup]  WITH CHECK ADD  CONSTRAINT [FK_QuestionRangeGroup_Question] FOREIGN KEY([QuestionID])
REFERENCES [dbo].[Question] ([ID])
GO

ALTER TABLE [dbo].[QuestionRangeGroup] CHECK CONSTRAINT [FK_QuestionRangeGroup_Question]
GO

ALTER TABLE [dbo].[QuestionRangeGroup]  WITH CHECK ADD  CONSTRAINT [FK_QuestionRangeGroup_QuestionRange] FOREIGN KEY([QuestionangeID])
REFERENCES [dbo].[QuestionRange] ([ID])
GO

ALTER TABLE [dbo].[QuestionRangeGroup] CHECK CONSTRAINT [FK_QuestionRangeGroup_QuestionRange]
GO

EF 反向 POCO 生成器和 EF 都自己从数据库创建模型跳过此表并且不为其生成模型类。还有其他几个非常相似的也失败了。
我自己敲了一个非常简单的 .tt 来添加一堆相关的类(使用生成的模型的简单存储库)它看起来像这样。

<#@ template language="C#" debug="True" hostspecific="True" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Data" #>
<#@ assembly name="System.xml" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.SqlClient" #>
<#@ import namespace="System.Data" #>
using OsipDal.EF;
using System.Data.Entity;
namespace OsipDal.Repositories 
{
<#
    string connectionString = @"data source=DESKTOP-5IHV7AT\SQLEXPRESS;initial catalog=Osip;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework";
    SqlConnection con = new SqlConnection(connectionString);
    con.Open();
    DataTable schema = con.GetSchema("Tables");

    foreach(DataRow row in schema.Rows)
    { 
        var tableName = row["TABLE_NAME"].ToString();
        var className = string.Format("{0}Repo", tableName.Trim());
#>
    public partial class <#= className #>: RepositoryBase<<#= tableName.Trim() #>>
    {
        public <#= className #>(DbContext context) : base(context) 
            { }
    }

<# } #>

}

这会获取所有表并为所有表生成类。显然还没有完成,但基本上可以工作。 有点令人沮丧,因为数据库目前有 40 多个表,并且在我完成之前可能会翻倍。我想在进行过程中迭代地创建模型、存储库等。这一点很重要,因为在我通过编写 DAL 并且我的测试按照我想要的方式运行之前,我不会获得正确的数据库架构,这可以确保我的数据库正在处理我正在尝试的内容达到。

有什么想法吗?如果有帮助,这将是开源的,一旦我的数据库和 DAL 不再令人尴尬,我会将它们推到 GIT 中心,让世界参与/参与。

提前谢谢各位...

J

【问题讨论】:

  • 该表看起来像一个多对多链接表。 EF 不会为这些生成模型,因为它会将其转换为导航属性(我认为)。然后显示为 QuestionQuestionange 生成的类以及它在 DbContext 中设置的任何映射。
  • 您说得对,先生!我刚刚意识到我是一只愚蠢的老恐龙,并发现了那个明显的错误。现在制定 SQL 以排除我的 TT 文件中的那些,我会很高兴去。另外,当然,将此问题标记为“la脚”;-)

标签: c# sql-server entity-framework t4


【解决方案1】:

我只是添加这个答案,因为我在搜索其他内容时发现了这个问题,如果您希望 Reverse POCO 生成多对多映射表:

UseMappingTables = true; // If true, mapping will be used and no mapping tables will be generated. If false, all tables will be generated.

希望它能对其他人有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-30
    • 2018-07-07
    • 2014-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-27
    相关资源
    最近更新 更多