Как установить значение внешнего ключа при вставке данных в базу данных в Asp.Net MVC - PullRequest
0 голосов
/ 26 октября 2019

Я использую код первый подход. У меня есть два класса как следующие:

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; }
}

Я не мог понять, как установить значение 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 привело к значению вне допустимого диапазона

Я проверил нулевое значение DateTime, но они не были нулевыми.

Как правильно установить внешний ключ при добавлении новой записи в базу данных? И если мой подход правильный (я сомневаюсь в этом), как я могу исправить эту ошибку?

Спасибо

Ответы [ 2 ]

0 голосов
/ 26 октября 2019

Кажется, вы забыли добавить дату здесь. Проверьте, не обнуляется ли это, или добавьте дату:

Product product = new Product();
product.title = added.title;
product.price = added.price;
product.type = added.type ;

product.date_of_release = added.date;
0 голосов
/ 26 октября 2019

Если вы уже убедились, что дата не является нулевой, и это не является проблемой, вы, вероятно, пропускаете дату, которая выходит за пределы между SqlDateTime.MinValue() и SqlDateTime.MaxValue().

SQL DateMin: (1 января 1753 года)

SQL DateMax: (31 декабря 9999 года)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...