【发布时间】:2018-06-15 09:14:14
【问题描述】:
我被这个难住了。我正在使用实体框架 (EF 6.1.3) 并生成了一个数据库优先模型(这是奇怪的部分,因为我所做的大部分谷歌搜索都有代码优先的结果)。
当我尝试查询数据库时,我收到以下错误:
在模型生成过程中检测到一个或多个验证错误:TCCIntegration.DataAccess.Ozone.Context.CORP_MASTER: : EntityType 'CORP_MASTER' has no key defined。定义此 EntityType 的键" "定义此 EntityType 的键。 CorpMaster: EntityType: EntitySet 'CorpMaster' 基于没有定义键的类型 'CORP_MASTER'。
但我可以看到在实际的 SQL 数据库中定义了一个主键,并且在 .EDMX 中,我可以看到主键包含在模型中。
加上它是数据库优先的问题,我无法向模型添加任何数据注释,因为它们是自动生成的。我有什么明显的遗漏吗? (我尝试从.EDMX 中删除表格并重新添加它们并刷新.EDMX)
这是 SQL DDL(感谢 STLDevoper)
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
CREATE TABLE [dbo].[CORP_MASTER](
[CORP_MASTER__ID] [varchar](255) NOT NULL,
[CORP_MAST_ACQUIRED] [varchar](2) NULL,
[CORP_MAST_YEAR_START] [int] NULL,CONSTRAINT [PK_CORP_MASTER] PRIMARY KEY
CLUSTERED
(
[CORP_MASTER__ID] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF,
ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]
GO
编辑 [CodeName47] EDMX 确实表明它们应该是键
编辑
我创建了一个空的控制台应用程序,然后再次尝试,结果相同。 我有一个继承自 DbContext 的类
namespace ConsoleApp2
{
public class OzoneLiveLite : DbContext
{
public DbSet<CORP_MASTER> CorpMaster { get; set; }
}
}
提供者类
namespace ConsoleApp2
{
public class OzoneLiveLiteProvider
{
private readonly OzoneLiveLite _ozoContext;
public OzoneLiveLiteProvider() : this(new OzoneLiveLite())
{
}
public OzoneLiveLiteProvider(OzoneLiveLite ozoneLiveLiteProvider)
{
_ozoContext = ozoneLiveLiteProvider;
}
public void GetProjectFinancials()
{
var corpMaster = _ozoContext.CorpMaster;
var ozoneFinancials = from corpMast in corpMaster select corpMast.CORP_MASTER__ID;
}
public void Dispose()
{
_ozoContext?.Dispose();
}
}
}
最后是主类
namespace ConsoleApp2
{
class Program
{
static void Main(string[] args)
{
var ozoneProvider = new OzoneLiveLiteProvider();
ozoneProvider.GetProjectFinancials();
Console.ReadKey();
}
}
}
我实现上下文的方式可能有问题吗?
【问题讨论】:
-
请提供
CORP_MASTER表的SQL DDL,包括主键的定义。 -
道歉 - SQL 数据定义语言 - 用于创建
CORP_MASTER表的CREATE TABLE语句。 -
您应该将
CORP_MASTER表的 DDL 添加到您的问题中,而不是在评论中发布。 -
了解您正在使用的 EF 版本可能也很好。
-
这个主意不错,我试试看,谢谢
标签: c# entity-framework-6 ef-database-first