У меня есть другая перспектива ответить на это.
При работе на разных уровнях, например, в приложении MVC, контроллеру нужны службы для вызова бизнес-операций. В таких сценариях контейнер инжекции зависимостей может использоваться для инициализации служб, чтобы исключить исключение NullReferenceException. Это означает, что вам не нужно беспокоиться о проверке нулевого значения и просто вызвать службы с контроллера, как будто они всегда будут доступны (и инициализированы) как одиночный или прототип.
public class MyController
{
private ServiceA serviceA;
private ServiceB serviceB;
public MyController(ServiceA serviceA, ServiceB serviceB)
{
this.serviceA = serviceA;
this.serviceB = serviceB;
}
public void MyMethod()
{
// We don't need to check null because the dependency injection container
// injects it, provided you took care of bootstrapping it.
var someObject = serviceA.DoThis();
}
}
Если файл MDB находится в вашем пути к программе, то разрешения по умолчанию потребуют повышения прав, чтобы иметь возможность записывать файлы - я бы рекомендовал переместить данные в общую папку ApplicationData, где у конечных пользователей будет разрешения записи по умолчанию
Я столкнулся с этим, связанным с localdb, файл имеет имя:
myfolder/mysolution/myproject/App_Data/something.mdf
Как я исправил это, щелкните правой кнопкой мыши папку верхнего уровня (myfolder
), а затем выберите Properties
, затем выберите Edit
, затем выберите Users
, добавьте пользователям либо разрешение Modify
, либо оба Modify
и полный элемент управления (это среда разработки), а затем нажмите Apply.
Таким образом, другими словами, по моему опыту, неважно, в какую папку вы вставляете localdb, вам просто нужно дать пользователям разрешение на запись.
Большая вещь, которая изменилась между Windows XP и Windows Vista / 7, - это введение UAC, что означает, что пользователи, даже если они созданы как администраторы, обычно не имеют доступа для чтения и записи к «важным» местоположениям, таким как %programfiles%
(обычно C:\Program Files
или C:\Program Files (x86)
). Вот почему ваше приложение работает в Windows XP, а не в Windows Vista.
Вам необходимо сохранить данные DATA в каталоге %programdata%
(обычно C:\ProgramData
), если данные распределяются между пользователями по машина или %appdata%
(обычно C:\Users\USERNAME_GOES_HERE\AppData\Roaming
), если она специфична для данного пользователя. Теперь вы больше не сталкиваетесь с проблемой неспособности записать файл.
Причиной этого является то, что путем хранения данных в каталоге установки программ вы делали неправильную вещь . Windows не помешала вам сделать это раньше, но было довольно широко документировано, что %programfiles%
не было подходящим местом для хранения данных.
перейдите в папку, где установлена программа, и щелкните правой кнопкой мыши файл базы данных, а Properties -> Security -> Group или Username (щелкните по пользователям один за другим и увидите ниже разрешения)
Если для пользователя, если он не настроен на полный контроль, затем нажмите «РЕДАКТИРОВАТЬ» -> Выберите пользователя и дайте полный контроль.