BotMaster3000
BotMaster3000

Reputation: 482

Entity Framework Core SQLite How to use relative Data Source

In a current Project of mine I am using Entity Framework Core together with SQLite in an ASP.Net-Project.

My Problem is, that the Database in the project-files is used, instead of the one in the ./bin-Directory

I followed the instructions of the docs.microsoft-page to create the database:

https://learn.microsoft.com/de-de/ef/core/get-started/overview/first-app?tabs=visual-studio

This is the Connectionstring I am using.

protected override void OnConfiguring(DbContextOptionsBuilder options)
    => options.UseSqlite("Data Source=MySqliteDatabase.db");

I let the created Database be copyied over, when newer.

I browsed through a number of pages, looking for ways to provide a relative Database path, but I couldnt find a solution to this. It either still uses the project-DB-File, or it wont create the new Database, because it cant be opened, or so.

Does anyone have a solution to this? I noticed that Entity-Framework-Core-5 is kind of a new release, could this be a bug or similar of this particular version?

Upvotes: 0

Views: 1768

Answers (1)

BotMaster3000
BotMaster3000

Reputation: 482

Thanks @Sergey and @ErikEJ.

So to solve this, I really needed to provide the full path of the directory. Since Directory.GetCurrentDirectory returned the wrong path, that is, the path to the project-directory instead of the /bin/Debug/... , I looked at the path that is named in the Config-File, as @Sergey suggessted, using the following Code:

AppDomain.CurrentDomain.SetupInformation.ApplicationBase

I got this from the following Stackoverflow page: How to find path of active app.config file?

It said there, to access the ConfigurationFile-Property, but for ASP.Net it is ApplicationBase I guess.

In there was the correct path, the one of the /bin/Debug/... .

Put together, my new Method looked like this:

protected override void OnConfiguring(DbContextOptionsBuilder options)
{
    string databasePath = $"{AppDomain.CurrentDomain.SetupInformation.ApplicationBase}MySqliteDatabase.db";
    options.UseSqlite($"Data Source={databasePath}");
}

This works for me as intended, thanks alot for the support, maybe this will help someone else as well.

Upvotes: 0

Related Questions