【发布时间】:2020-02-22 07:01:39
【问题描述】:
我使用的是代码优先方法。我有两个类如下:
public class User
{
[Key]
[Column(Order = 0)]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int User_id { get; set; }
[Required]
[Column(Order = 1)]
[StringLength(50)]
[Display(Name = "Name")]
public string name { get; set; }
[DataType(DataType.Date)]
[DisplayFormat(ApplyFormatInEditMode =true,DataFormatString ="{0:dd/MM/yyyy}")]
public DateTime? date_of_birth { get; set; }
[Required]
[Column(Order = 3)]
[StringLength(254)]
[Display(Name = "Email")]
[DataType(DataType.EmailAddress)]
public string email { get; set; }
public virtual ICollection<Product> products { get; set; }
}
public class Product
{
[Key]
[Required]
public int product_id { get; set; }
public int UserId { get; set; }
public virtual User user { get; set; }
[Required]
public string title { get; set; }
[Required]
public int type { get; set; }
[DataType(DataType.Date)]
public DateTime date_of_release { get; set; }
[Required]
public float price { get; set; }
}
我正在尝试添加新产品并将其与登录用户相关联。
这是我的视图模型:
public class AddProductViewModel
{
[Required]
public string title { get; set; }
[Required]
public int type { get; set; }
[DataType(DataType.Date)]
public DateTime date_of_release { get; set; }
[Required]
public float price { get; set; }
}
我不知道如何设置作为登录用户 ID 的 userId 的值,所以我最终从数据库中查询它并将其设置如下:
[HttpPost]
public ActionResult AddProduct(AddProductViewModel added)
{
if(ModelState.IsValid)
{
using (KitapTakasDB db = new KitapTakasDB())
{
string user_email = User.Identity.GetUserName();
Product product = new Product();
product.title = added.title;
product.price = added.price;
product.type = added.type ;
product.userId = db.User.Where(o => o.email ==
user_email).FirstOrDefault().user_id;
db.Product.Add(product);
db.SaveChanges(); //this is where the crash happens...
}
return RedirectToAction("Index", "Home");
}
return View();
}
提交表单时,db.SaveChanges() 行出现异常。
DbUpdateException: '更新条目时出错。有关详细信息,请参阅内部异常。'
内部异常:
将 datetime2 数据类型转换为 datetime 数据类型导致值超出范围
我检查了 null DateTime 但它们不是 null。
向数据库添加新条目时设置外键的正确方法是什么?如果我的方法是正确的(我对此表示怀疑),我该如何解决这个错误?
谢谢
【问题讨论】:
标签: c# asp.net asp.net-mvc entity-framework model-view-controller