无法使用Subsonic 2.2插入记录(SqlServer)

时间:2011-05-24 04:51:09

标签: .net subsonic2.2

我使用SqlServer 2008.这是数据库架构:(请注意,这只是为了测试SubSonic)

Create Table Dept
(
 DeptID int not null Identity(1,1) primary key,
 DeptName varchar(20),
 Location varchar(30) 
) 

GO

 Create Table tUsers
 (
 UserID int not null identity(1,1) primary key,
 UserName varchar(50)
 )
 GO

create table Emp
(
 EmpID int not null identity(1,1) primary key,
 DeptID int foreign key references dept(deptid),
 CreatedBy varchar(50),
 EmpName varchar(50)
 )

以下是保存员工的C#代码:

Emp em = new Emp();            
em.DeptID = 3;
em.CreatedBy = "Temp1";
em.EmpName = "Temp3";            
em.Save();

这是Sql探查器跟踪:

exec sp_executesql N'/* GetInsertSql(Emp) */ INSERT INTO [dbo].[Emp]([DeptID],[CreatedBy],[EmpName]) VALUES(@DeptID,@CreatedBy,@EmpName);SELECT SCOPE_IDENTITY() AS newID;',N'@DeptID int,@CreatedBy varchar(8000),@EmpName varchar(5)',@DeptID=3,@CreatedBy='',@EmpName='Temp3'

可以看出,即使从应用程序传递了值,CreatedBy也总是为空。 (之前,这个专栏是一个外键,但SubSonic总是抛出(格式)错误,因此我根据SubSonic论坛的建议将其更改为varchar。)

知道出了什么问题吗?

提前致谢。

Sathya Narayanan

1 个答案:

答案 0 :(得分:1)

CreatedBy是SubSonic自动审核领域的一部分。列名为

  • CreatedBy
  • CreatedOn
  • ModifiedBy
  • ModifiedOn

会自动填入HttpContext.Current.User.Identity.NameDateTime.Now的值。

这也是你不断收到格式错误的原因。

我建议只需将此列重命名为没有启动审计机制。

另见http://jamesewelch.wordpress.com/2008/09/24/how-to-use-custom-audit-fields-with-subsonic/