首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >LINQ到实体-触发器和表默认值

LINQ到实体-触发器和表默认值
EN

Stack Overflow用户
提问于 2013-02-25 19:15:07
回答 3查看 936关注 0票数 2

我有一个名为Room的数据库表。

此表在某些列上有一些默认值:

代码语言:javascript
运行
复制
ALTER TABLE [dbo].[Room] ADD  CONSTRAINT [DF_Room_Created]  DEFAULT (getdate()) FOR [Created]
GO

ALTER TABLE [dbo].[Room] ADD  CONSTRAINT [DF_Room_Updated]  DEFAULT (getdate()) FOR [Updated]
GO

ALTER TABLE [dbo].[Room] ADD  CONSTRAINT [DF_Room_RecordStatus]  DEFAULT (0) FOR [RecordStatus]

该表还具有以下触发器:

代码语言:javascript
运行
复制
ALTER TRIGGER [dbo].[RoomInsert] ON [dbo].[Room]
FOR INSERT 
AS
DECLARE @PKey int, @TrackingId int
SELECT @PKey = PKey, @TrackingId = TrackingId FROM INSERTED
IF @TrackingId = 0
UPDATE Room
SET TrackingId = @PKey
WHERE PKey = @PKey

我们目前正在开发一个使用Entity Framework4的MVC3Web应用程序。当我运行以下代码时,没有应用任何默认值,也没有触发触发器:

代码语言:javascript
运行
复制
// Create the new room record
                Room newRoom = new Room();
                newRoom.SiteKey = parentFloor.SiteKey;
                newRoom.SiteSurveyKey = parentFloor.SiteSurveyKey;
                newRoom.BuildingKey = parentFloor.BuildingKey;
                newRoom.FloorKey = parentFloor.PKey;
                newRoom.Name = eventModel.RoomName;
                newRoom.Description = eventModel.RoomName;
                newRoom.CreatedBy = eventModel.UserKey;

                _entities.Rooms.AddObject(newRoom);
                _entities.SaveChanges();

我在数据库上运行了一个概要文件,插入结果如下:

代码语言:javascript
运行
复制
exec sp_executesql N'insert [dbo].[Room]([TrackingID], [OriginalPKey], [BuildingKey], [SiteSurveyKey], [SiteKey], [Name], [Description], [RiskColour], [CreatedBy], [Created], [Updated], [RecordStatus], [FloorKey], [DisplayOrder])
values (null, null, @0, @1, @2, @3, @4, null, @5, null, null, null, @6, null)
select [PKey]
from [dbo].[Room]
where @@ROWCOUNT > 0 and [PKey] = scope_identity()',N'@0 int,@1 int,@2 int,@3 varchar(255),@4 varchar(255),@5 int,@6 int',@0=29970,@1=20177,@2=39373,@3='Another Room ',@4='Another Room ',@5=139,@6=25454

我猜测没有应用默认值是因为专门传递了NULL,并且由于sp_executesql而没有触发触发器。有什么办法可以绕过这个问题吗?

EN

Stack Overflow用户

发布于 2013-02-25 19:25:56

当你使用EF时,你基本上只需要接受应用程序是主程序,而不是数据库。

您应该在Room构造函数中设置默认值,而不是通过数据库默认约束(诚然,对于创建/更新日期,出于时区等原因,您可能希望在数据库中执行此操作...)

Entity Framework - Default value for property using Data Annotations

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15065700

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档