【发布时间】:2020-11-13 06:05:39
【问题描述】:
Entity Framework Core DbSet 没有从数据库返回任何数据,但是数据库有很多寄存器。
这是实体
public class Entity : BaseEntity
{
public int EntityStatusId { get; set; }
public int AddressId { get; set; }
public string Name { get; set; }
public string SocialReason { get; set; }
public string CNPJ { get; set; }
public EntityType Type { get; set; }
public DateTime? CreationDate { get; set; }
public bool? ReceiptDisabled { get; set; }
public EntityStatus EntityStatus { get; set; }
public Address Address { get; set; }
public List<Company> Companies { get; set; }
public List<Role> RoleList { get; set; }
}
public abstract class BaseEntity
{
public int Id { get; set; }
}
现在这是配置类。
public class EntityMap : IEntityTypeConfiguration<Entity>
{
public void Configure(EntityTypeBuilder<Entity> builder)
{
builder.ToTable("Entity");
builder.HasKey(entity => entity.Id);
builder
.Property(entity => entity.EntityStatusId);
builder
.Property(entity => entity.AddressId);
builder
.Property(entity => entity.Name);
builder
.Property(entity => entity.SocialReason);
builder
.Property(entity => entity.CNPJ);
builder
.Property(entity => entity.Type)
.HasConversion(x => (int)x, x => (EntityType)x);
builder
.Property(entity => entity.CreationDate);
builder
.Property(entity => entity.ReceiptDisabled);
builder
.HasOne(entity => entity.EntityStatus);
builder
.HasOne(entity => entity.Address);
builder
.HasMany(entity => entity.RoleList)
.WithOne(x => x.Entity);
builder
.HasMany(entity => entity.Companies)
.WithOne(x => x.Entity);
}
}
还有上下文类。
public class AucContext : DbContext
{
public AucContext(string databaseConfiguration)
{
_databaseConfiguration = databaseConfiguration;
}
private readonly string _databaseConfiguration;
public DbSet<Campaign> Campaigns { get; set; }
public DbSet<CampaignProject> CampaignProjects { get; set; }
public DbSet<Company> Companies { get; set; }
public DbSet<Cart> Carts { get; set; }
public DbSet<CartItem> CartItems { get; set; }
public DbSet<Donation> Donations { get; set; }
public DbSet<DonationRecurrencePeriod> DonationRecurrencePeriods { get; set; }
public DbSet<Entity> Entities { get; set; }
public DbSet<Institution> Institutions { get; set; }
public DbSet<PaymentMethod> PaymentMethods { get; set; }
public DbSet<Person> People { get; set; }
public DbSet<Project> Projects { get; set; }
public DbSet<User> Users { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.ApplyConfiguration(new CampaignMap());
modelBuilder.ApplyConfiguration(new CampaignProjectMap());
modelBuilder.ApplyConfiguration(new CompanyMap());
modelBuilder.ApplyConfiguration(new CartMap());
modelBuilder.ApplyConfiguration(new CartItemMap());
modelBuilder.ApplyConfiguration(new DonationMap());
modelBuilder.ApplyConfiguration(new DonationRecurrencePeriodMap());
modelBuilder.ApplyConfiguration(new EntityMap());
modelBuilder.ApplyConfiguration(new InstitutionMap());
modelBuilder.ApplyConfiguration(new PaymentMethodMap());
modelBuilder.ApplyConfiguration(new PersonMap());
modelBuilder.ApplyConfiguration(new ProjectMap());
modelBuilder.ApplyConfiguration(new UserMap());
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
optionsBuilder.UseSqlServer(_databaseConfiguration);
}
}
而且查询很简单
var entity = context.Entities.Find(3)
这个简单的查询没有返回任何内容,对正在发生的事情有什么想法吗?
更新
我从昨天开始更新了一些东西,现在我更新了问题,不幸的是仍然不起作用
OBS:. ConnectionString 没问题,其他对象也正常。
【问题讨论】:
-
仔细检查 web.config/app.config 中的连接字符串,并在实际构建文件夹中查找任何配置文件。 (如果是 Windows 应用程序或服务)通常假设应用程序将连接到特定的服务器/数据库,但 EF 配置为创建/更新架构,它已经消失并在其他地方创建了一个空数据库。
-
最可能的原因是应用程序连接到错误的数据库。检查您的连接字符串。您可以使用 SQL Server 的 Profiler 或扩展事件来查看发送到数据库的命令。您可以配置 EF Core 已使用 ILogger 来记录连接事件及其生成的查询。在 EF Core 5 中,您可以使用
LogTo将其配置为直接写入控制台或任何其他 StreamWriter -
检查 dbContext 似乎是初始化问题。试试
var entity = context.Entities.ToList()如果不起作用问题是上下文未初始化 -
你可以尝试添加 virtual 用于收藏导航
public virtual List<Company> Companies { get; set; } public virtual List<Role> RoleList { get; set; } -
@PanagiotisKanavos OP 在首次发布问题时并未包含地图注册码。他只是包括实体和地图类,并说他没有返回数据。所以我最初的想法是他没有为实体注册映射。此后他更新了他的问题。
标签: entity-framework asp.net-core .net-core entity-framework-core