C# 如何使用ASP.NET MVC项目参考从控制台应用程序使用ASP.NET MVC的MYSQL DbContext
我正在尝试从.NET控制台应用程序编写一个Windows服务,该应用程序执行在MySQL数据库中发布数据的操作。我试图使用ASP.NET项目中的C# 如何使用ASP.NET MVC项目参考从控制台应用程序使用ASP.NET MVC的MYSQL DbContext,c#,asp.net,.net,asp.net-mvc,topshelf,C#,Asp.net,.net,Asp.net Mvc,Topshelf,我正在尝试从.NET控制台应用程序编写一个Windows服务,该应用程序执行在MySQL数据库中发布数据的操作。我试图使用ASP.NET项目中的DbContext类,但是当我运行控制台应用程序时,数据不会被发布。我正在使用Topshelf依赖项来创建Windows服务并使调试更容易 我的控制台应用程序代码如下所示: public class UpdateReceivePost { private readonly Timer timer;// To establish time
DbContext
类,但是当我运行控制台应用程序时,数据不会被发布。我正在使用Topshelf依赖项来创建Windows服务并使调试更容易
我的控制台应用程序代码如下所示:
public class UpdateReceivePost
{
private readonly Timer timer;// To establish time for service
public UpdateReceivePost()
{
timer = new Timer(1000) { AutoReset = true }; // the service will start in one minute
timer.Elapsed += TimerElapsed;//calls a timeelapsed mehodd
}
protected IDbFactory DbFactory { get; private set; }
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
UserDbContext dbContext = new UserDbContext();
ReceivePost receivePost = new ReceivePost()
{
Status = "pending"
};
dbContext.receivePosts.Add(receivePost);
dbContext.SaveChanges();
// string[] lines = new string[] { DateTime.Now.ToString() };
// File.AppendAllLines(@"F:\nepal.txt", lines);
}
public void Start()
{
timer.Start();//start the timer
}
public void Stop()
{
timer.Stop(); //stops the timer
}
}
您应该将dbContext类包装在using语句中,以便在发布到db后将其释放 上下文的生存期从实例创建和运行时开始 当实例被释放或垃圾回收时结束。使用 如果希望上下文控制的所有资源都是 设置在块的末端。使用时,编译器 在中自动创建try/finally块并调用dispose 最后一个街区 尝试重新安装具有这些版本的软件包,并查看错误是否消失
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
ReceivePost receivePost = new ReceivePost()
{
Status = "pending"
};
using(UserDbContext dbContext = new UserDbContext())
{
dbContext.receivePosts.Add(receivePost);
dbContext.SaveChanges();
}
// string[] lines = new string[] { DateTime.Now.ToString() };
// File.AppendAllLines(@"F:\nepal.txt", lines);
}
为什么dbcontext没有包装在using语句中。我不认为你在使用DI@ShahidManzoorBhat你能告诉我怎么做吗?这解决了我的问题吗?您应该始终将dbContext包装在using块中,除非您为自己DI处理它。您是否也可以发布在运行应用程序时遇到的错误或异常code@ShahidManzoorBhat我的错误在dbContext.receivepost.Add(receivepost)抛出;System.Data.Entity.Core.ProviderIncompatibleException:“提供程序未返回ProviderManifestToken字符串。”内部异常:MethodAccessException:尝试通过方法“MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)”访问方法“MySql.Data.MySqlClient.MySqlConnection.get_Settings()”失败。将上下文类放入USE块后是否仍会抛出该方法。如果是,请发布错误消息。使用对我无效。。我的错误在dbContext.receivepost.Add(receivepost)抛出;System.Data.Entity.Core.ProviderIncompatibleException:“提供程序未返回ProviderManifestToken字符串。”内部异常:MethodAccessException:尝试通过方法“MySql.Data.MySqlClient.MySqlProviderServices.GetDbProviderManifestToken(System.Data.Common.DbConnection)”访问方法“MySql.Data.MySqlClient.MySqlConnection.get_Settings()'失败。@ShahidManzoorBhatt我正在使用实体框架版本6.4.0感谢您为我所说的使用mysql.data和mysql..data.entiyy的版本对我有效@沙希德曼齐尔巴特
private void TimerElapsed(object sender, ElapsedEventArgs e)
{
ReceivePost receivePost = new ReceivePost()
{
Status = "pending"
};
using(UserDbContext dbContext = new UserDbContext())
{
dbContext.receivePosts.Add(receivePost);
dbContext.SaveChanges();
}
// string[] lines = new string[] { DateTime.Now.ToString() };
// File.AppendAllLines(@"F:\nepal.txt", lines);
}