C# 实体框架-将字段转换为枚举
我的结构如下:C# 实体框架-将字段转换为枚举,c#,.net,entity-framework,enums,entity-framework-6,C#,.net,Entity Framework,Enums,Entity Framework 6,我的结构如下: CREATE TABLE [dbo].[Decisions]( [ID] [int] IDENTITY(1,1) NOT NULL, [DecisionName] [nvarchar](250) NOT NULL, CONSTRAINT [PK_Decisions] PRIMARY KEY CLUSTERED ( [ID] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_
CREATE TABLE [dbo].[Decisions](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DecisionName] [nvarchar](250) NOT NULL,
CONSTRAINT [PK_Decisions] PRIMARY KEY CLUSTERED
(
[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]
CREATE TABLE [dbo].[Vacancies](
[ID] [int] IDENTITY(1,1) NOT NULL,
[DecisionID] [int] NOT NULL,
.....
CONSTRAINT [PK_Vacancies] PRIMARY KEY CLUSTERED
(
[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]
ALTER TABLE [dbo].[Vacancies] WITH CHECK ADD CONSTRAINT [FK_Vacancies_Decisions] FOREIGN KEY([DecisionID])
REFERENCES [dbo].[Decisions] ([ID])
ON UPDATE CASCADE
ON DELETE CASCADE
GO
ALTER TABLE [dbo].[Vacancies] CHECK CONSTRAINT [FK_Vacancies_Decisions]
GO
所以,正如你所看到的,决策和空缺是一对多的,相互联系的。
好啊然后,我在.NET应用程序中创建一个ADO.NET实体数据模型,然后尝试将决策ID转换为枚举。完整的。然后我尝试编译我的应用程序,并得到以下错误:
错误2错误112:从属角色中所有属性的类型
引用约束的类型必须与相应的
主体角色中的属性类型。财产类型
实体“VTSModel.空缺”上的“DecisionID”与
引用中实体“VTSModel.Decision”上的属性“ID”
约束“FK_决策”
为什么会这样?我在决策表中有4条记录(ID等式为1、2、3、4),用这些ID创建了4个枚举值,基础类型为Int32,表空缺完全为空(空缺实体的字段DecisionID也有Int32)
我使用的Visual Studio 2013+MVC 5+实体框架6.1.2+MS SQL 2014与您的问题不太相关,但为什么您的表只包含自然键和代理键?如果一个
决策
除了其名称之外没有其他属性,那么就没有理由有一个单独的表。为了回答这个问题,enum
在CLR中作为int32
实现,但它不是int32
。它是一个单独的类型,因此在EF世界中,您不能使用它引用另一个实体中的int32
。@Keith Payne您是否建议我在其他表中使用类似“This is a decision bla bla bla bla”的字符串而不是ID?并始终检查此字符串是否相同,但不是“this is a decision bla bla bla bla bla”(来自小写字母)例如?@Keith Payne我是否也要将空缺中的DecisionID更改为枚举类型?是的,您可以将ID更改为相同的枚举类型以使其正常工作。