如何在ASP.NET 5 Beta 8控制台应用程序中使用EF7并连接到没有startup.cs的SQL Server?

hly*_*tes 5 c# entity-framework-core asp.net-core-mvc asp.net-core

问题

我正在编写一个asp.net 5控制台示例应用程序,我想使用Entity Framework 7与我的后端进行通信.我知道如何在Web应用程序中做到这一点,但我失去了如何不使用时完成此任务控制台应用程序startup.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));
}
Run Code Online (Sandbox Code Playgroud)

在这里,您可以为entityframework7配置服务,并使用SQL Server连接字符串.

尝试

我查看了GitHub,Google和Bing,但只找到了使用EF7的Web应用程序的示例项目和代码.我还没有找到与控制台应用程序讨论EF7的文档.

我想编写上面的代码,但是在我main.cs的控制台应用程序中有它.我没有成功,显然在main.cs中有以下内容:

SampleConsoleDbContext scab = new SampleConsoleDbContext();
Run Code Online (Sandbox Code Playgroud)

我无法告诉我的程序连接字符串是什么,我仍然怀疑这是获得上下文实例化的正确方法main.cs.

我很感激有关这个有趣问题的任何帮助,建议或评论.谢谢.

hea*_*vyd 7

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>");
    }
}
Run Code Online (Sandbox Code Playgroud)

然后您可以在Main中创建上下文的实例:

class Program
{
    static void Main(string[] args)
    {
        using (var db = new BloggingContext())
        {
            db.Blogs.Add(new Blog { Url = "http://blogs.msdn.com/adonet" });
            var count = db.SaveChanges();
            Console.WriteLine("{0} records saved to database", count);

            Console.WriteLine();
            Console.WriteLine("All blogs in database:");
            foreach (var blog in db.Blogs)
            {
                Console.WriteLine(" - {0}", blog.Url);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

在ASP.NET示例中,调用.AddEntityFramework()是允许EF使用与ASP.NET其余部分相同的服务提供程序(认为依赖注入)(这意味着EF将获得与ASP.NET一样的记录器等) .但是,如果您不想遵循该模式,那么您可以使用上面显示的方法.


Sea*_*kit 2

正如Heavyd所说,大部分内容是不需要的,只是为了设置 DI,这也是我阅读代码的方式,可能是错误的。

至于设置连接字符串,您可以简单地执行以下操作:

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

SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);
Run Code Online (Sandbox Code Playgroud)

将连接字符串传递到上下文。

您可以根据需要对其进行抽象,但这就是将连接字符串传递给上下文实例的方式。