【发布时间】: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 不会为这些生成模型,因为它会将其转换为导航属性(我认为)。然后显示为
Question和Questionange生成的类以及它在 DbContext 中设置的任何映射。 -
您说得对,先生!我刚刚意识到我是一只愚蠢的老恐龙,并发现了那个明显的错误。现在制定 SQL 以排除我的 TT 文件中的那些,我会很高兴去。另外,当然,将此问题标记为“la脚”;-)
标签: c# sql-server entity-framework t4