EF拥有和反向POCO生成器都跳过表

时间:2016-05-07 17:39:26

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

有一个奇怪的问题。

考虑下表(来自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并且我的测试表现得像我想要的那样好,这确保了数据库正在处理我所做的事情&# 39;我试图实现。

任何想法的家伙?如果有帮助的话,这将是开源的,一旦我的数据库和DAL不再令人尴尬,我会把它们推上GIT中心,让世界玩/加入。

先谢谢你们......

Ĵ

2 个答案:

答案 0 :(得分:2)

我只是添加了这个答案,因为我在搜索其他内容时发现了这个问题,考虑将Reverse POCO Generator配置文件(Database.tt)中的此参数更改为false,如果您希望Reverse POCO生成多对多映射表:

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

希望它会帮助别人。

答案 1 :(得分:1)

斯科特打败了我,我很蹩脚,显然这是一个链接表,所以EF和反向POCO发生器都比我聪明,不包括它们。

我回到正轨: - )

Ĵ