如何在ASP.NET 5 Beta 8控制台應用程序中使用EF7並連接到沒有startup.cs的SQL Server?

asp.net-core asp.net-core-mvc c# entity-framework-core

問題

我正在編寫一個asp.net 5控制台示例應用程序,我想使用Entity Framework 7與我的後端進行通信。我知道如何在Web應用程序中執行此操作,但我不知道如何在不使用startup.cs而是main.cs時為控制台應用程序完成此main.cs

在Web應用程序中,您將在startup.cs具有以下代碼:

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

在這裡,您可以為entityframework7配置服務,並使用SQL Server連接字符串。

嘗試

我查看了GitHub,Google和Bing,但只找到了使用EF7的Web應用程序的示例項目和代碼。我沒有找到與控制台應用程序討論EF7的文檔。

我想編寫上面的代碼,但是在我的main.cs用於我的控制台應用程序。我沒有成功,顯然在main.cs中有以下內容:

public void ConfigureServices(IServiceCollection services)
{
    var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

    services.AddEntityFramework()
            .AddSqlServer()
            .AddDbContext<BloggingContext>(options => options.UseSqlServer(connection));
}

我無法告訴我的程序連接字符串是什麼,我仍然懷疑這是在main.cs中實例化上下文的正確方法。

我很感激有關這個有趣問題的任何幫助,建議或評論。謝謝。

一般承認的答案

由於heavyd說大部分都不需要,只是為了設置DI,這也是我如何讀取代碼,可能是錯的。

至於設置連接字符串,你可以很簡單:

var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);

將連接字符串傳遞給上下文。

您可以根據需要抽象,但這是將連接字符串傳遞給上下文實例的方法。


熱門答案

Microsoft實際上已經開始為Entity Framework 7構建文檔

從他們的示例中,您可以通過重寫OnConfiguring方法來內聯配置上下文:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        builder.UseSqlServer(@"<connection string>");
    }
}

然後您可以在Main中創建上下文的實例:

public class BloggingContext : DbContext
{
    public DbSet<Blog> Blogs { get; set; }
    public DbSet<Post> Posts { get; set; }

    protected override void OnConfiguring(DbContextOptionsBuilder builder)
    {
        builder.UseSqlServer(@"<connection string>");
    }
}

在ASP.NET示例中,對.AddEntityFramework()的調用是允許EF使用與ASP.NET其餘部分相同的服務提供程序(認為依賴注入)(這意味著EF將獲得與ASP相同的記錄器等。 NET正在使用)。但如果您不想遵循該模式,那麼您可以使用上面顯示的方法。




許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因
許可下: CC-BY-SA with attribution
不隸屬於 Stack Overflow
這個KB合法嗎? 是的,了解原因