【问题标题】:How to have multiple tables with the same schema in Entity Framework?如何在实体框架中拥有多个具有相同架构的表?
【发布时间】:2018-06-29 18:47:56
【问题描述】:

我正在尝试使用实体框架在同一个数据库中拥有多个具有相同架构的表。

例如,如果我有下面的类,并且我登录到 SQL Server 数据库,我只能看到一个名为 dbo.Schema 的表。

有没有办法让多个表具有相同的架构?

class Context1 : DbContext
{
    public DbSet<Schema> table1 { get; set; }
}

class Context2 : DbContext
{
    public DbSet<Schema> table2 { get; set; }
}

class Schema
{
    [Key]
    public int EntryId { get; set; }
}

【问题讨论】:

  • 是的,为另一个表创建一个新类。您是否尝试进行某种表继承?
  • 请避免在问题标题中添加标签。您的问题已被正确标记

标签: c# .net sql-server entity-framework entity-framework-6


【解决方案1】:

有没有办法让多个表具有相同的架构?

您可以使用Data AnnotationsFluent API 来配置表和架构名称。

假设您有以下模型:

public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

使用数据注释,您可以将其命名为blogging.blogs

[Table("blogs", Schema = "blogging")]
public class Blog
{
    public int BlogId { get; set; }
    public string Url { get; set; }
}

使用 Fluent API,您可以重写 OnModelCreating 方法,将其命名为 blogging.blogs

class MyContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }

    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Blog>()
            .ToTable("blogs", schema: "blogging");
    }
}

【讨论】:

    【解决方案2】:

    你可以简单地用多个表做这样的事情。

    public partial class AdventureWorksEntities : DbContext
    {
        public AdventureWorksEntities()
            : base("name=AdventureWorksEntities")
        {
        }
    
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }
    
        public virtual DbSet<Address> Addresses { get; set; }
        public virtual DbSet<AddressType> AddressTypes { get; set; }
        public virtual DbSet<Contact> Contacts { get; set; }
        public virtual DbSet<ContactType> ContactTypes { get; set; }
        public virtual DbSet<CountryRegion> CountryRegions { get; set; }
        public virtual DbSet<StateProvince> StateProvinces { get; set; }
    }
    

    在这段代码中,我们可以从同一个数据库中添加更多表。无需创建另一个类并继承 DbContext。 或者您可以将项目添加到项目中-> 新项目-> 数据-> ADO.NET 实体数据模型。 这将生成与您选择的表相同的代码。

    谢谢

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多