'帮助'服务器无法生成列

时间:2016-10-27 10:08:17

标签: c# linq

我的表格代码

use master
go
create database Test01
go
use Test01
SET 
  ANSI_NULLS, 
  QUOTED_IDENTIFIER, 
  CONCAT_NULL_YIELDS_NULL, 
  ANSI_WARNINGS, 
  ANSI_PADDING 
ON;
go
CREATE TABLE [dbo].[GiangVien](
    [ID] [int] IDENTITY(1,1) NOT NULL,
    [MaGV]  AS ('GV'+right('000000'+CONVERT([varchar](10),[ID]),(6))) PERSISTED NOT NULL primary key,
    [HoTenGV] [nvarchar](255) NOT NULL,
    [NgaySinh] [datetime] NOT NULL,
    [GioiTinh] [nvarchar](4) NOT NULL,
    [DiaChi] [nvarchar](255) NOT NULL,
    [MaKhoa] [varchar](7) NOT NULL,
)

当我使用Linq插入新值时此消息错误是throw:
服务器无法生成类型为“VarChar(8)”的主键列。 我现在应该怎么做 ?

1 个答案:

答案 0 :(得分:0)

错误很明显:将计算列作为主键是不可能的。使用[ID]列作为PK 如果您希望在[MaGV]上进行有效搜索,则可以在该列上创建索引(群集或非群集)。

另一种方法是使用它:

CREATE TABLE [dbo].[GiangVien](
    [MaGV] VARCHAR(10) PRIMARY KEY,
    ....

然后在插入时自己计算/生成值。这将允许外键指向此主键。