所以,我一直在玩EF和Sqlite。我已经设法在我的开发环境中让他们成功地从数据库读取和写入“Hello world”。我正在使用我所说的Entity框架和sqlite实体框架提供程序。
我读到EF需要在单线程环境中运行。这完全让我困惑,因为根据我的理解,网络应用程序并行处理多个请求。如何才能希望在Web服务器中使用需要单线程的实用程序?
如果重要的话,这里是我用来玩连接的控制台应用程序 - 它也代表了我目前与EF的总结经验
class Program
{
static void Main(string[] args)
{
using (var context = new SessionContext("SessionTables.sqlite"))
{
var session = new Session()
{
SessionID = Guid.NewGuid().ToString("B"),
Domain = "NA",
Username = "Sidney",
Start = DateTime.UtcNow,
};
context.Sessions.Add(session);
var action = new UserAction()
{
ActionDescription = "Tested Entity Framework",
OccurredAt = DateTime.UtcNow,
};
session.Actions = new List<UserAction>();
session.Actions.Add(action);
context.SaveChanges();
}
}
}
public class Session
{
public string SessionID { get; set; }
public string Domain { get; set; }
public string Username { get; set; }
public DateTime Start { get; set; }
public DateTime End { get; set; }
public virtual ICollection<UserAction> Actions { get; set; }
}
public class UserAction
{
public int UserActionID { get; set; }
public string ActionDescription { get; set; }
public DateTime OccurredAt { get; set; }
public Guid SessionID { get; set; }
public virtual Session Session { get; set; }
}
class SessionContext : DbContext
{
public SessionContext(string filename)
: base(new SQLiteConnection()
{
ConnectionString = new SQLiteConnectionStringBuilder()
{
DataSource = filename, ForeignKeys = true
}
.ConnectionString
}, true)
{ /**/ }
public DbSet<Session> Sessions { get; set; }
public DbSet<UserAction> Actions { get; set; }
}
答案 0 :(得分:2)
那应该不是问题。来自NuGet的Microsoft.Data.Sqlite包含一个使用SQLITE_THREADSAFE = 1(序列化)编译的SQLite版本。
尽管如此,EF似乎没有任何问题会让人觉得应用程序应该是&#34;单线程&#34;。
请阅读本文档,解释您使用SQLite的唯一限制。正如文件所说:
使用SQLite提供程序时,您有许多限制 应该知道。其中大部分是由于局限性的结果 基础SQLite数据库引擎,并非特定于EF。
https://docs.microsoft.com/en-us/ef/core/providers/sqlite/limitations