如何在实体框架中具有相同模式的多个表?

时间:2018-06-29 18:47:57

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

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

例如,如果我拥有下面的类,并且登录到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; }
}

2 个答案:

答案 0 :(得分:0)

您可以使用多个表简单地做到这一点。

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实体数据模型中。 这将与您选择的表生成相同的代码。

谢谢

答案 1 :(得分:0)

  

有没有办法让多个表具有相同的模式?

您可以使用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");
    }
}