实体框架将复合键与某些 varchar 列错误地作为标识

Dry*_*ker 1 .net entity-framework-4

我有下表:

CREATE TABLE [dbo].[MyTable](
    [timestamp] [timestamp] NOT NULL,
    [Col1] [varchar](20) NOT NULL,
    [Col2] [varchar](20) NOT NULL,
    [col3] [datetime] NOT NULL,
    [col4] [varchar](10) NOT NULL,
    [Col5] [varchar](10) NOT NULL,
    [Col6] [varchar](10) NOT NULL,
    [Col7] [decimal](38, 20) NOT NULL,
    [Col8] [decimal](38, 20) NOT NULL,
    [Col9] [datetime] NOT NULL,
 CONSTRAINT [MyTable$0] PRIMARY KEY CLUSTERED 
(
    [Col1] ASC,
    [Col2] ASC,
    [Col3] ASC,
    [Col4] ASC,
    [Col5] ASC,
    [Col6] ASC,
    [Col7] ASC
) WITH (PAD_INDEX  = OFF, STATISTICS_NORECOMPUTE  = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS  = ON, ALLOW_PAGE_LOCKS  = ON, FILLFACTOR = 90) ON [Data Filegroup 1]
) ON [Data Filegroup 1]
Run Code Online (Sandbox Code Playgroud)

我使用 EF Generator 来创建 MyTable 类,设置所有字段并保存更改。我收到以下错误:

仅标识列支持存储生成的密钥。键列“Col2”的类型为“SqlServer.varchar”,它不是标识列的有效类型。

我不明白的是为什么它认为它是一个身份列。我将如何修复该错误?我在寻找正确的方向吗?

Dry*_*ker 5

问题似乎是错误消息无关紧要。它应该说的是关于不可为空的 PK 值。PK 中涉及的值之一似乎为空。我认为这个问题与 C# 中的 String 类型可以为空有关,因为 Nullable 在 EF 设计器中被设置为 False 并且没有抛出错误,因为它根本没有被设置。