У меня очень крошечный проект, чтобы понять методологию «сначала код».
Когда я создаю базу данных, используя «сначала код», и добавляю объект - он работает хорошо, все свойства объекта сохраняются в базе данных.
Затем я пытаюсь получить сохраненный объект. Возвращает объект, но одно свойство всегда равно null.
Кто-нибудь может объяснить, что не так с моим кодом, пожалуйста?
Класс сущности
public class Item
{
public Guid Id { get; set; }
public string OwnerId { get; set; }
public DateTime CreationDate { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public bool IsStoreItem { get; set; }
public decimal Price { get; set; }
public int Count { get; set; }
public string TopBidderId { get; set; }
public Material Material { get; set; }
public ItemStatus Status { get; set; }
public int KrauseNumber { get; set; }
}
Сущность базы данных
public class ApplicationDbContext : IdentityDbContext<ApplicationIdentityUser>
{
public ApplicationDbContext()
: base("DefaultConnection", throwIfV1Schema: false) { }
public DbSet<Item> Items { get; set; }
public static ApplicationDbContext Create() => new ApplicationDbContext();
}
}
Общий репо
public class EfGenericRepository<T> : IEfGenericRepository<T> where T : class
{
internal readonly ApplicationDbContext _dbContext;
internal readonly DbSet<T> _dbSet;
public EfGenericRepository(ApplicationDbContext dbContext)
{
_dbContext = dbContext;
_dbSet = _dbContext.Set<T>();
}
public virtual IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>, IOrderedQueryable<T>> orderBy = null, string includeProperties = "")
{
IQueryable<T> query = _dbSet;
if (filter != null)
{
query = query.Where(filter);
}
foreach (var includeProperty in includeProperties.Split
(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries))
{
query = query.Include(includeProperty);
}
if (orderBy != null)
{
return orderBy(query).ToList();
}
else
{
return query.ToList();
}
}
}
Попробуйте получить сущность
public void GetEntity(Guid id)
{
var context = new Repository();
var auction = context.ItemRepository.Get().FirstOrDefault(i => i.Id == id);
}
Результат
![enter image description here](https://i.stack.imgur.com/ZcSvY.png)
UPDATE
Также я должен сказать, что
var request = "SELECT TopBidderId FROM Items WHERE Id = '*item_id*'";
var result = _dbContext.Database.SqlQuery<string>(request).FirstOrDefaultAsync().Result;
прекрасно работает и возвращает абсолютно правильное значение.