gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-30 01:32:30 26 4
gpt4 key购买 nike

有个奇怪的问题。

考虑下表(来自 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 多张 table ,而且在我完成之前可能会增加一倍。我想边走边迭代地创建模型、存储库等。这很重要,因为在我通过编写 DAL 的好方法并且我的测试按照我希望的方式运行之前,我不会正确地获得数据库模式,这向我保证数据库正在处理我正在尝试的事情实现。

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

在此先感谢大家...

J

最佳答案

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

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

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

关于c# - EF 拥有和反向 POCO 生成器都跳过表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37091720/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com