0

为什么我们在使用Entity Framework的时候默认值没有注册SQL呢?在T-SQL为什么默认值在sql的时候我们首先使用的是实体框架代码没有注册

表代码:

CREATE TABLE [dbo].[T2](
[ID] [int] IDENTITY(1,1) NOT NULL, 
[name] [nvarchar](50) COLLATE Arabic_CI_AS NOT NULL, 
[Groups] [int] NOT NULL CONSTRAINT [DF_T2_Groups] DEFAULT (ident_current('T2')), 
CONSTRAINT [PK_T2] 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] 

当我使用实体框架,为Groups列的默认值不能被注册。

为什么?

解决方案是什么?

public class T2 
{ 
     public int ID { set; get; } 
     public string name { set; get; } 
     public int Groups { set; get; } 
} 

telentity db = new telentity(); 
db.T2.Add(new T2() 
{ 
    name="ali" 
}); 
db.SaveChange(); 
+0

如果'T2.Groups'允许空值,那么'public int Groups {get; set;}'应该是'public int?组{get; set;}' – 2013-04-30 17:27:26

+0

已更正的代码sql – 2013-04-30 17:33:21

回答

0

我认为你总是在Groups获得价值0,因为integer的C#默认为0。实体框架只是保存它在实体对象中找到的值。数据库“认为”啊,有一个价值,不需要自己找到默认值。 (毕竟,0是一个值)。

如果您不希望EF在插入和更新语句中包含该值,则可以将其映射为DatabaseGeneratedOption.Computed

+0

您可以以计算的DatabaseGeneratedOption为例。坦克 – 2013-05-01 03:15:24

+0

你是指“你可以带走”的含义是什么?如果这对你有帮助,也许很高兴知道StackOverflow公民身份的一部分是将有用的答案标记为已接受。 – 2013-05-13 12:05:01

相关问题