我正在尝试使用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; }
}
答案 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 Annotations或Fluent 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");
}
}