0
我遇到了无法插入或更新到数据库的问题。我正在使用Dapper并使用嵌套类作为我想要传递数据的模型。Dapper无法将数据传递到数据库
我有一个错误是:低于
The member Information of type TestProject.Models.Information cannot be used as a parameter value
我的模式是:
public class Member
{
[Required]
public string Username { get; set; }
[Required]
public string Password { get; set; }
[Required]
public string Information MemberInfo { get; set; }
}
public class Information
{
[Required]
public string Email { get; set; }
[Required]
public string City { get; set; }
[Required]
public string State { get; set; }
[Required]
public DateTime BirthDate { get; set; }
}
而且我的控制之下是:
public IHttpActionResult SetMemberInfo(Member models)
{
using (TransactionScope trans = new TransactionScope())
using (IDbConnection conn = new SqlConnection(GetConnection()))
{
conn.Open();
int rowsAffected = conn.Execute("MemberInformation", models, commandType: CommandType.StoredProcedure);
trans.Complete();
return rowsAffected;
}
return Ok();
}
我的存储过程如下:
ALTER PROCEDURE dbo.[MemberInformation]
(
@Username NVARCHAR(100),
@Password NVARCHAR(100),
@Email NVARCHAR(100),
@City NVARCHAR(100),
@State NVARCHAR(100),
@BirthDate DATETIME
)
AS
BEGIN
// TODO: Do something with the data
END
而且我通过数据从客户端控制器低于:
var models = {
"Username": "MyUsername",
"Password": "MyPassword",
"MemberInfo": {
"Email": "MyEmail",
"City": "MyCity",
"State": "MyState",
"BirthDate": "2017-08-23"
}
};
$.ajax({
type: "POST",
contentType: "application/json",
url: "http://localhost/SetMemberInfo",
data: JSON.stringify(models),
dataType: "json",
success: function (data) {
window.location.reload();
},
error: function (response) {
console.log(JSON.stringify(response));
}
});
但是,如果我没能到嵌套类(指在信息类中的所有数据移动到成员类),一切正常。
如何告诉dapper将嵌套类中的数据分开,并将其拆分为单个类,即使在应用程序级别是嵌套类。
或者有没有其他解决方案呢?
您的回答非常感谢。
感谢
嗨,你认为是因为Dapper没有这种支持,我应该做3个类?其中2个就像我上面的问题(使用嵌套类,并且这只在尝试将数据从客户端传递到服务器端时可用),然后当想要访问数据库时,我应该创建1个类(如你的答案否1)根本不是嵌套类(这个类的目的仅仅是为了DB和Dapper之间的连接),这样DB就可以理解它了?对于2号,我不太明白,它是什么意思property1和value1?是来自嵌套类吗?谢谢 – Natsuki
那么,完全取决于你!在我看来,动态对象最合适,因为您只会在数据层级使用此逻辑,并且您已经接收到包含所有必要信息的结构化对象。因此,每当您的成员类发生更改时,它都会在数据访问方法中产生错误,使其一致。 –
嗨,还有一个我没有得到使用动态对象..是属性和值将如下所示:'conn.Execute(“MemberInformation”,新{电子邮件:models.MemberInfo.Email,城市: models.MemberInfo.City(等等)},commandType:CommandType.StoredProcedure);'?谢谢 – Natsuki