Ale*_*ecu 2 .net c# entity-framework-core
我在一个普通的 .net 项目中使用实体框架核心,版本 4.7。我知道我可以做到这一点。问题是我似乎无法将实体映射到表,因为“ToTable”方法不存在。我无法编辑 poco 或实体类,因为它们是预定义和生成的。所以我不能使用该属性。我在互联网上查看,每个人似乎都使用这种方法将实体映射到表。
这是我的代码:
public class FactsDbContext : DbContext
{
public DbSet<TblIncident> TblIncidents { get; set; }
public DbSet<TblAction> TblActions { get; set; }
public DbSet<TblAddressTypeAlias> TblAddressTypeAliases { get; set; }
public DbSet<TblCountry> TblCountries { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
//these methods don't exist in my case
modelBuilder.Entity<TblIncident>(entity => entity.ToTable("Incident"));
modelBuilder.Entity<TblIncident>().ToTable("Incident");
}
}
Run Code Online (Sandbox Code Playgroud)
我还尝试将 IEntityTypeConfiguration 与 EntityTypeBuilder 一起使用,但它仍然无法访问映射到表方法:
public class IncidentConfig : IEntityTypeConfiguration<TblIncident>
{
public void Configure(EntityTypeBuilder<TblIncident> builder)
{
builder.ToTable("Incident");
}
}
Run Code Online (Sandbox Code Playgroud)
我查看了 GitHub 上的 Entity Framework Core 存储库,并在存储库中搜索了“Totable”方法。事实证明它被定义为一个扩展方法,但它位于单独的 nuget 包和名为 Microsoft.EntityFrameworkCore.SqlServer 的库中
下载包后,我得到了我需要的 Totable 方法。当您已经拥有可以直接在实体框架核心包中添加实体的“表”属性时,将该方法添加到 sql server 的单独包中仍然没有意义。
您可以使用以下方法。您必须使用Table数据注释。
数据库上下文:
public virtual DbSet<Article> Article { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Article>(b =>
{
b.Property(e => e.Property1).HasDefaultValue(true);
... //Other properties
}
Run Code Online (Sandbox Code Playgroud)
型号类别:
[Table("Article")]
public class Article
{
Run Code Online (Sandbox Code Playgroud)
您也可以ToTable在 DBContext 中使用 to,但必须确保已包含using Microsoft.EntityFrameworkCore;.
modelBuilder.Entity<TblIncident>().ToTable("Incident");根据文档,
线路看起来是正确的。https://learn.microsoft.com/en-us/ef/core/modeling/relational/tables# Fluent-api
| 归档时间: |
|
| 查看次数: |
3506 次 |
| 最近记录: |