[英]How to write a EF Core 2.0 DbContext which can be used in WPF and Web.Api.Core
我正在為WPF和Web-Api使用這兩個上下文。 關鍵在於EF6,我可以編寫一個構造函數的重載,並將連接字符串傳遞給它,以供WPF應用程序使用。 但是在EF Core中,我必須重寫Onconfiguring方法,這樣就無法在Web.Api.Core中使用它。 因為我想使用在startup.cs中注冊的依賴項注入功能。
services.AddDbContext<SamuraiContext>(options => options.UseSqlServer(Configuration.GetConnectionString("SamuraiConnection")));
如何創建可以在兩種情況下使用的上下文?
非常感謝。
WPF的上下文:
public class SamuraiContext:DbContext
{
public static readonly LoggerFactory MyConsoleLoggerFactory
= new LoggerFactory(new[] {
new ConsoleLoggerProvider((category, level)
=> category == DbLoggerCategory.Database.Command.Name
&& level == LogLevel.Information, true) });
public DbSet<Samurai> Samurais { get; set; }
public DbSet<Quote> Quotes { get; set; }
public DbSet<Battle> Battles { get; set; }
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
var connectionString = ConfigurationManager.ConnectionStrings["WPFDatabase"].ToString();
optionsBuilder
.UseLoggerFactory(MyConsoleLoggerFactory)
.EnableSensitiveDataLogging(true)
.UseSqlServer(connectionString);
}
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SamuraiBattle>()
.HasKey(s => new { s.SamuraiId, s.BattleId });
base.OnModelCreating(modelBuilder);
}
}
這是我對Web.Api的上下文:
public SamuraiContext(DbContextOptions<SamuraiContext> options)
: base(options)
{ }
public DbSet<SamuraiApp.Domain.Samurai> Samurais { get; set; }
public DbSet<SamuraiApp.Domain.Quote> Quotes { get; set; }
public DbSet<SamuraiApp.Domain.Battle> Battles { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<SamuraiBattle>()
.HasKey(s => new { s.BattleId, s.SamuraiId });
base.OnModelCreating(modelBuilder);
}
您仍然可以為連接字符串使用第二個構造函數:
private readonly string connectionString = null;
public SamuraiContext(DbContextOptions<SamuraiContext> options)
: base(options)
{
}
public SamuraiContext(string connectionString)
{
this.connectionString = connectionString;
}
protected override void OnConfiguring(DbContextOptionsBuilder optionsBuilder)
{
if(this.connectionString != null)
optionsBuilder
.UseLoggerFactory(MyConsoleLoggerFactory)
.EnableSensitiveDataLogging(true)
.UseSqlServer(this.connectionString);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.