Как вы создаете класс Entity для извлечения другого Entity из хранилища?
Это вопрос C#, использующий.NET Framework, созданный на Asp.NET Boilerplate. Опять же, чтобы еще раз подчеркнуть вопрос, который задают, это "КАК...", поэтому, если был предоставлен ответ по URL-ссылке или описательное объяснение того, как что-то должно быть сделано, я был бы очень признателен. (Не отвечайте на вопросы о том, как завязывать шнурки, показывая изображение привязанного ботинка, и вы не отвечаете "как ловить рыбу", показывая запись кого-то, кто ловит рыбу...)
Так как вопрос довольно простой (мне не нужно перефразировать / повторять заголовок снова), я приведу пример.
Если у меня есть служба форума, и я создаю класс для загрузки Thread
, Внутри этого класса потока должна быть какая-то коллекция, массив, список или даже набор dbset Post
это тянет на конструкции.
[Table("Thread", Schema = "dbo")]
public class ThreadModel
{
[Key]
public long Id { get; set; }
public string Title { get; set; }
//Idea 1
//Value should automatically be pulled and cached the moment class connects to database
public Post[] Posts { get; set; }
//Idea 2
//Post has a constructor to return all post that matches a thread id. While new tag keeps the return value constantly refreshed.
public Post[] Posts { get { return new Post(this.Id) } }
//Idea 3
//Not sure how collection is supposed to work. Does it automatically just pull or will i need to make a method to request?
public virtual ICollection<Post> Posts { get; set; }
//Example constructor
//When connected to database key-value pairs that match database labels will automatically get stored in class
protected ThreadModel()
{
//Idea 1-A
//Should be a value of null or empty if database yields no results
Posts = new Post();
}
public ThreadModel(int threadid) : this()
{
//Idea 1-A
Id = threadid;
//new Post => returns all posts in db
//Posts default value is all post in db
Posts = Posts.Select(post => post.threadid == this.id)
//Idea 3-A
Posts = Posts.Get(post => post.threadid == this.id)
//Idea 4
Posts = new Posts().GetThread(threadid);
}
}
Побочные вопросы
Если все сущности созданы наследованием Entity
тогда в какой момент я подвергаюсь EntityFramework и DbContext
?
Мне нравится этот пример, представленный пользователем, когда он пытается подключить ABP к своей базе данных. Но их пример не показывает родительские / дочерние ресурсы. Я не могу найти руководство, которое они использовали для его создания, и как оно связано с использованием ABP для получения примера EntityFramework DbContext
Как это работает? Я не могу найти инструкции или объяснения для этого? (Что я должен войти в Google, чтобы получить ответы на эти механики?)
[Table("AbpItems")]
public class Item : Entity
{
[ForeignKey("PostId")]
public Post Post { get; set; }
public int PostId { get; set; }
}
Как это интегрируется в / с EntityFramework от abp?
Где я должен создать свою таблицу базы данных / класс? Проект следует схеме сборки Core.csproj, Application.csproj и EntityFramework.csproj. Но похоже, что каждый пример создает классы на разных этапах или в разных местах решения.
1 ответ
Использование GetAllIncluding
, См. https://github.com/aspnetboilerplate/aspnetboilerplate/issues/2617
Вот полное решение;
namespace EbicogluSoftware.Forum.Threads
{
[Table("Threads")]
public class Thread : FullAuditedEntity
{
[Required]
[StringLength(500)]
public virtual string Title { get; set; }
[Required]
[StringLength(2000)]
public virtual string Text { get; set; }
public virtual List<Post> Posts { get; set; }
public Thread()
{
Posts = new List<Post>();
}
}
[Table("Posts")]
public class Post : FullAuditedEntity
{
[Required]
[StringLength(2000)]
public virtual string Text { get; set; }
}
public class ThreadDto
{
public string Title { get; set; }
public string Text { get; set; }
public List<PostDto> Posts { get; set; }
public ThreadDto()
{
Posts = new List<PostDto>();
}
}
public class PostDto
{
public string Text { get; set; }
}
public class ThreadAppService : IApplicationService
{
private readonly IRepository<Thread> _threadRepository;
public ThreadAppService(IRepository<Thread> threadRepository)
{
_threadRepository = threadRepository;
}
public async Task<List<TenantListDto>> GetThreads()
{
var threads = await _threadRepository.GetAllIncluding(x => x.Posts).ToListAsync();
return threads.MapTo<List<TenantListDto>>();
}
}
}
Где я должен создать свою таблицу базы данных / класс?
Вы можете создать их в YourProject.Core.proj