问题
我正在编写一个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));
}
这里有为entityframework7配置的服务和使用SQL Server的连接字符串。
尝试
我查看了GitHub,Google和Bing,但只找到了使用EF7的Web应用程序的示例项目和代码。我还没有找到与控制台应用程序讨论EF7的文档。
我想编写上面的代码,但是在我的main.cs
中为我的控制台应用程序提供了代码。我没有成功,显然在main.cs中有以下内容:
SampleConsoleDbContext scab = new SampleConsoleDbContext();
我无法告诉我的程序连接字符串是什么,我仍然怀疑这是在main.cs
中实例化上下文的正确方法。
对于有关此问题的任何帮助,建议或意见,我将不胜感激。谢谢。
答案 0 :(得分:7)
Microsoft实际上已开始为Entity Framework 7构建documentation。
从他们的示例中,您可以通过覆盖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中创建上下文的实例:
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);
}
}
}
}
在ASP.NET示例中,对.AddEntityFramework()
的调用是允许EF使用与ASP.NET其余部分相同的服务提供程序(认为依赖注入)(这意味着EF将获得相同的记录器等)那个ASP.NET正在使用)。但如果您不想遵循该模式,那么您可以使用上面显示的方法。
答案 1 :(得分:2)
由于 heavyd 表示大部分内容不需要,只是为了设置DI,这也是我读代码的方式,可能是错误的。
至于设置连接字符串,您可以这么做:
var connection = @"Server=(localdb)\mssqllocaldb;Database=EFGetStarted.AspNet5;Trusted_Connection=True;";
SampleConsoleDbContext scab = new SampleConsoleDbContext(connection);
将连接字符串传递给上下文。
您可以根据需要对此进行抽象,但这是将连接字符串传递给上下文实例的方法。