#c# #asp.net-core #entity-framework-core
#c# #asp.net-ядро #сущность-фреймворк-ядро
Вопрос:
Мне нужно создать действие в контроллере для добавления данных из формы в базу данных (ядро Entity Framework). У меня есть две связанные модели с именами user и newsletter.Пример: когда добавляется новый пользователь, мне нужно добавить его также в таблицу рассылки. Я следую этому руководству https://learn.microsoft.com/cs-cz/aspnet/core/data/ef-mvc/complex-data-model?view=aspnetcore-3.1
Существует код:
public class user
{
[Key]
public int id { get; set; }
//Other properties
public string mail { get; set; }
public virtual newsletter news { get; set; }
}
public class newsletter
{
[Key]
public int newsId { get; set; }
[ForeignKey("user")]
public int userId { get; set; }
[Required]
public bool registered { get; set; }
}
Я попытался создать какое-то действие (код ниже), но когда я проверяю сведения о пользователе, информационный бюллетень свойств всегда равен нулю.
Код контроллера:
[HttpPost]
[ValidateAntiForgeryToken]
public async Task<IActionResult> register(user user, bool reg)
{
try
{
if(ModelState.IsValid)
{
user.news = new newsletter() { userId = user.id, registered = reg };
user.passChng = DateTime.Today;
_c.user.Add(user);
await _c.SaveChangesAsync();
}
return RedirectToAction("registerForm");
}
catch (Exception ex)
{
return Content(ex.ToString());
}
}
Результат JSON:
{
"id": 2,
//Other properties
"mail": "me@mail.com",
"news": null,
}
Пожалуйста, кто-нибудь может написать действие для добавления данных в таблицу рассылки и связать их с пользователем? У меня абсолютно нет никакой другой идеи. Спасибо <3.
Комментарии:
1. Привет, Мартин, каковы твои требования? при отправке пользовательской модели он должен создавать пользователя и рассылку новостей? я не могу следовать
2. Когда отправляется новый пользователь, мне нужно зарегистрировать его также в таблице рассылки. Я следую этому руководству learn.microsoft.com/cs-cz/aspnet/core/data/ef-mvc /. …
3. Если между пользователем и новостной рассылкой существует связь 1 .. 1, вам следует добавить свойство навигации type
User
в вашу модельnewsletter.cs
. Попробуйте с этим и дайте мне знать. Вы всегда можете проверить фактический код SQL, который entity framework отправил в вашу базу данных сSQL Profiler
4. Да, существует связь 1 .. 1, но, честно говоря, я не знаю, что вы думаете о «свойстве навигации». Я пытаюсь сделать это в первый раз, поэтому не могли бы вы отредактировать мой код и опубликовать его как ответ, пожалуйста?
5. Я имел в виду это => entityframeworktutorial.net/code-first /. … Я не уверен на 100%, что с аннотацией данных [ForeignKey] достаточно указать entity framework для создания отношений 1 — 1 между пользователями и рассылками. Добавьте a
public User User {get; set;}
(свойство навигации) в класс newsletter, aadd-migration {something}
и aupdate-database
для обновления базы данных SQL. Проверьте, выполнили ли вы все шаги в этой статье