У меня есть хранимые процедуры на сервере sql для вставки пользователя, но я получаю эту ошибку при попытке сопоставить sp с имеющимся у меня классом DTO.
DataClasses1DataContext _dataContext = new DataClasses1DataContext();
public List<WebUserDTO> InsertUser (string Username, string UserPassword, string FullName, string Email)
{
var user = _dataContext.WebUser_InsertUser(Username, UserPassword, FullName, Email);
return user.Select(aux => new WebUserDTO()
{
UserName = aux.Username,
UserPassword = aux.UserPassword,
FullName = aux.FullName,
Email = aux.Email
}).ToList();
}
Здесь отображается ошибка: var user = _dataContext.WebUser_InsertUser(Username, UserPassword, FullName, Email);
Мои инструкции вставки следующие, и у меня есть правильные результаты при выполнении dbo.WebUser_InsertUser
на сервере sql
CREATE PROC dbo.WebUser_InsertUser0
@Username AS NVARCHAR (20),
@UserPassword AS NVARCHAR (20),
@FullName AS NVARCHAR (50),
@Email AS NVARCHAR (50),
@IdUser AS INT OUT
AS
BEGIN
SET NOCOUNT ON;
INSERT INTO dbo.WebUser (UserName, UserPassword, FullName, Email)
VALUES (@UserName, @UserPassword, @FullName, @Email)
SET @IdUser = SCOPE_IDENTITY()
RETURN @IdUser;
END
GO
CREATE PROC dbo.WebUser_InsertUser
@Username1 AS NVARCHAR (20),
@UserPassword1 AS NVARCHAR (20),
@FullName1 AS NVARCHAR (50),
@Email1 AS NVARCHAR (50)
AS
BEGIN
SET NOCOUNT ON;
DECLARE
@UserId1 AS INT
EXEC dbo.WebUser_InsertUser @UserName1, @UserPassword1, @FullName1, @Email1, @UserId1 OUT
SELECT W.IdUser, W.UserTypeId, W.Username, W.UserPassword, W.FullName, W.Email
FROM dbo.WebUser AS W
WHERE W.IdUser = @UserId1
RETURN;
END
Тип переменной должен быть неявным из контекста. То, что вы не вводите имя типа, не означает, что компилятор в любой момент остановится для проверки типов! Если вы хотите избавиться от проверок типов во время компиляции, используйте динамический (или лучше измените свой дизайн, чтобы у вас тоже не было). Проблема, вероятно, в том, что WebUser_InsertUser возвращает void (или, по крайней мере, одна перегрузка). Не зная подробностей этого класса, это лучшее предположение, которое я получил.
Какой тип возврата метода var user = _dataContext.WebUser_InsertUser
?
Скорее всего вам понадобится что-то вроде этого:
public List<WebUserDTO> InsertUser (string Username, string UserPassword, string FullName, string Email)
{
_dataContext.WebUser_InsertUser(Username, UserPassword, FullName, Email);
// since you did not provide _dataContext type definition
// I can only guess how your user collection is called in your DbContext.
return _dataContext.users.Select(aux => new WebUserDTO()
{
UserName = aux.Username,
UserPassword = aux.UserPassword,
FullName = aux.FullName,
Email = aux.Email
}).ToList();
}
Спасибо! Наконец-то сработало, проблема заключалась в возвращаемом типе моей хранимой процедуры, которую я смог изменить на WebUser из дизайнера
Можете ли вы опубликовать больше окружающего кода? Также посмотрите здесь. stackoverflow.com/questions/22814302/…