无法转换类型&System; System.Data.Entity.DynamicProxies.ApplicationUser_xxxxxxxx'输入' System.String'

时间:2016-10-22 21:09:43

标签: c# sql entity-framework asp.net-mvc-5

我正在尝试使用以下ActionResult

将数据保存到数据库中
public ActionResult Create(GigFormViewModel viewModel)
    {
        var artistId = User.Identity.GetUserId();
        var artist = _context.Users.Single(u => u.Id == artistId);
        var genre = _context.Genres.Single(g => g.Id == viewModel.Genre);
        var gig = new Gig
        {
            Artist = artist,
            DateTime = DateTime.Parse(string.Format("{0} {1}", viewModel.Date, viewModel.Time)),
            Genre=genre,
            Venue=viewModel.Venue
        };
        _context.Gigs.Add(gig);
        _context.SaveChanges();
        return RedirectToAction("Index", "Home");

    }

保存数据时,我收到错误

  

无法转换类型&System; System.Data.Entity.DynamicProxies.ApplicationUser_C811B05818B5E64ECDA3F7F75CC04ED97BE32CA9226F31FEEEF1EE499B74428B'输入' System.String'。

以下是截图了解更多详情: enter image description here

型号:

public class Genre
{
    public byte Id { get; set; }

    [Required]
    [StringLength(255)]
    public string Name { get; set; }
}

public class Gig
{
    public int Id { get; set; }

    [Required]
    [StringLength(255)]
    public ApplicationUser Artist { get; set; }

    [Required]
    public DateTime DateTime { get; set; }

    [Required]
    public string Venue { get; set; }

    [Required]
    public Genre Genre { get; set; }
}

可能是什么问题?

2 个答案:

答案 0 :(得分:1)

自己想出来。 我认为这是Gigs模型的问题和Artist的验证。 删除了数据注释[StringLength(255)],它运行正常。

如此更新的Gigs Model类如下:

public class Gig
 {
public int Id { get; set; }

[Required]
[StringLength(255)]
public ApplicationUser Artist { get; set; }

[Required]
public DateTime DateTime { get; set; }

[Required]
public string Venue { get; set; }

[Required]
public Genre Genre { get; set; }
}

答案 1 :(得分:1)

在我的情况下,这个完全相同的错误是由于DateTime对象无法识别我格式化传递给它的字符串的方式。

我输入时间为' 9.05' (使用句号)而DateTime期望冒号	 05:05'。

Mosh确实在视频中提到他假定有效输入,并且稍后会添加验证。因此,要克服这一障碍,请确保您的测试数据对DateTime String Format

有效