Я довольно новичок в программировании (6 месяцев) и в том, что EF пинает меня в задницу, поэтому любые указатели в правильном направлении приветствуются!Цель моего проекта / упражнения - создать приложение в стиле Facebook для владельцев собак и их собак.
В частности, я борюсь за создание DBO с собаками и их собаками.Цель состоит в том, чтобы ввести Dogname в форму, получить DogId для этого имени и добавить его в DBO с Dogs и их DogFriends.
Я не совсем уверен, как это сделать.Я подумываю о создании DBO только с DogId-column и DogFriendId-column (но я могу ошибаться, так как, похоже, мое понимание EFCore все еще очень ограничено ^^)
Надеюсь, я включил всенеобходимый код для проблемы, с которой я сталкиваюсь, если нет, не стесняйтесь просить больше
public class Dog : EntityBase<int>
{
public string FirstName { get; set; }
public DogFertility DogFertility { get; set; }
public DogGender DogGender { get; set; }
public string Description { get; set; }
public DateTime DoB { get; set; }
public DogBreed DogBreed { get; set; }
public virtual List<UserDog> UserDogs { get; set; }
public virtual List<DogFriend> DogFriends{ get; set; }
public virtual List<Dog> DogFriendList { get; set; }
public Dog()
{
UserDogs = new List<UserDog>();
DogFriends = new List<DogFriend>();
DogFriendList = new List<Dog>();
}
}
public class DogFriend : EntityBase<int>
{
public string DogFriendSearchInput { get; set; }
public string DogFriendFirstName { get; set; }
public Dog Dog { get; set; }
public DogFriend()
{
DogFriendFirstName = DogFriendSearchInput;
}
}
Я получил ViewModel для добавления DogFriends
public class AddDogFriendViewModel
{
public string DogFriendSearchInput { get; set; }
public string DogFriendFirstName { get; set; }
public int DogFriendId { get; set; }
public DogBreed DogBreed { get; set; }
public int DogId { get; set; }
public string ReturnUrl { get; set; }
public DogFriend DogFriend { get; set; }
public Domain.Model.Dog Dog { get; set; }
public AddDogFriendViewModel()
{
DogFriendFirstName = DogFriendSearchInput;
}
}
И форму для добавления DogFriends
<div>
<form method="post" asp-controller="DogOwner" asp-action="AddDogFriend" asp-route-returnurl="@Model.ReturnUrl">
<div asp-validation-summary="ModelOnly"></div>
<div class="navbar-header">
<div class="navbar-collapse collapse" style="margin-left:-15px">
<div>
<ul class="nav navbar-nav">
<div>
<li>
<input asp-for="@Model.DogFriendSearchInput" value="@Model.AddDogFriendViewModel.DogFriendSearchInput" asp-route-dogFriendFirstName="DogFriendSearchInput" style="width:400px" type="text" id="DogFriendSearchInput" onkeyup="SearchDogFriends()" placeholder="Search for DogName or DogOwnerUserName.." />
<input hidden asp-for="@Model.DogFriendSearchInput" value="@Model.DogFriendSearchInput" />
</li>
<li>
<a asp-controller="DogOwner" asp-action="AddDogFriend" asp-area="" asp-route-dogId="@Model.Dog.Id" asp-route-dogFriendFirstName="DogFriendSearchInput">Add this Dog to @Model.Dog.FirstName's friendslist</a>
</li>
</div>
</ul>
</div>
<br />
</div>
</div><br />
</form>
</div>
Это мой текущий контекст
public class DogFaceDbContext : IdentityDbContext<User, Role, string>
{
public DogFaceDbContext()
{
}
public virtual DbSet<Dog> Dogs { get; set; }
public virtual DbSet<UserDog> UserDogs { get; set; }
public virtual DbSet<DogFriend> DogFriends { get; set; }
public virtual DbSet<Dog> DogFriendList { get; set; }
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.Entity<UserDog>().HasKey(x => new { x.DogId, x.UserId });
builder.Entity<DogFriend>().HasOne(x => x.Dog).WithMany(x => x.DogFriends);
builder.Entity<Dog>().HasMany(x => x.UserDogs).WithOne(x => x.Dog);
builder.Entity<Dog>().HasMany(x => x.DogFriends).WithOne(x => x.Dog);
builder.Entity<User>().HasMany(x => x.UserDogs).WithOne(x => x.User);
}
Соответствующая часть Контроллера (очевидно, это не правильно, но я думаю, что могу сам разобраться в этой части, если ябыл правильный DBO):
[HttpGet]
public IActionResult AddDogFriend(int dogId)
{
var model = new DogViewModel();
model.Dog = _dogFaceDbContext.Dogs.First(x => x.Id == dogId);
model.Dogs = _dogFaceDbContext.Dogs;
return View(model);
}
[HttpPost]
public async Task<IActionResult> AddDogFriend(int dogFriendId, string DogFriendSearchInput, AddDogFriendViewModel model)
{
var dogfriend = new DogFriend
{
DogFriendSearchInput = model.DogFriendFirstName,
};
await _dogFaceDbContext.DogFriends.AddAsync(dogfriend);
await _dogFaceDbContext.SaveChangesAsync();
return RedirectToAction("Index", "DogOwner");
}
Большое спасибо за помощь студентам, которые борются с трудностями!