ExecuteMethodCall:类型'System.Nullable .1 [System.DateTime]'必须声明一个默认(无参数)构造函数

时间:2010-10-06 09:50:28

标签: c# .net linq-to-sql

我的sql Server 2000 DB包含返回Current DateTime的存储过程。 我有调用此过程的过程:

 [Function(Name = "dbo.spGetDBDateTime")]
public ISingleResult<DateTime?> GetDBDateTime()
{
    IExecuteResult result = this.ExecuteMethodCall(this, ((MethodInfo)(MethodInfo.GetCurrentMethod())),new object[]{} );
    return ((ISingleResult<DateTime?>)(result.ReturnValue));
}

我遇到了这样的错误:类型'System.Nullable`1 [System.DateTime]'必须声明一个默认(无参数)构造函数才能在映射过程中构造。

请问你能帮帮我吗?

2 个答案:

答案 0 :(得分:1)

由于服务器已经提供了T-SQL函数GETDATE(),因此您不需要自定义存储过程来获取当前服务器日期时间。您需要做的就是创建一个指向该函数的LINQ to SQL方法。将新方法添加到DataContext分部类(右键单击设计器表面并转到View Code),如下所示:

using System.Data.Linq.Mapping;
using System.Reflection;
using System;

namespace L2STest
{
    partial class MyDataContext
    {
        [Function(Name = "GetDate", IsComposable = true)]
        public DateTime GetSystemDate()
        {
            MethodInfo mi = MethodBase.GetCurrentMethod() as MethodInfo;
            return (DateTime)this.ExecuteMethodCall(this, mi, new object[] { }).ReturnValue;
        }
    }
}

并称之为:

DateTime serverDate = context.GetSystemDate();

这个答案的部分功劳在这里: - )

http://peteohanlon.wordpress.com/2008/01/11/sql-server-getdate-and-linq-to-sql/

答案 1 :(得分:0)

抱歉我的英文))) 嗨,大家好! 感谢您的帮助,但我刚刚解决了这个问题。

在MS Visual Studio 2008或更高版本中使用Server Explorer =&gt;数据连接=&gt;添加新连接并连接到我的数据库。然后在服务器资源管理器中显示,以及其他项目的DB,存储过程和我刚刚在代码中绘制了dbo.spGetDBDateTime过程,VS为此过程生成了包装,所以我可以调用它。