Первый шаг: перейдите в /etc/phpmyadmin/config.inc.php, затем раскомментируйте строки, где вы найдете AllowNoPassword. Второй шаг: войдите в свою учетную запись по умолчанию mysql
mysql -u root -p
use mysql;
update user set plugin="" where user='root';
flush privilege;
, и это все!
Наследование может быть представлено в базе данных по-разному, и существуют некоторые стратегии в зависимости от того, какой ORM вы используете. В конце концов, используя одну из стратегий , вы можете основать свой репозиторий на базовом классе и позволить ORM выступать в качестве прокси для разрешения нужного вам экземпляра или попытаться воссоздать себя в уровень хранилища, основанный на поле дискриминатора, нужные вам экземпляры
Receipt
ID
ReceiptNumber
CustomerNumber
CustomerEmail
CustomerOption
InternalNumber
InternalEmail
InternalOption
DISCRIMINATOR_FIELD
(большинство ORM делают этот перевод за вас), но для того, чтобы вы поняли идею, вы можете оставить только один хранилище для обработки всех классов как квитанции и сохранения иерархии в том виде, в каком она у вас есть.
открытый интерфейс IReceiptRepository {public Receipt Get (int id); Публичная квитанция Добавить (квитанция квитанции); }
public CustomerReceiptRepository : IReceiptRepository {
public Receipt Get(int id) {
var rec = DbContext.Table.Receipt.FirstOrDefault(r => r.id = id);
if(rec.DiscriminatorField == 1) //CustomerReceipt
{
return new CustomerReceipt
{
ID = ...
ReceiptNumber = ...
CustomerNumber = ...
CustomerEmail = ...
CustomerOption = ...
}
}
//all other cases are InternalReceipts
return new InternalReceipt
{
ID = ...
ReceiptNumber = ...
InternalNumber = ...
InternalEmail = ...
InternalOption = ...
}
}
}
То же самое для метода Add, просто заполните только те поля, которые вам нужны для этого объекта. В этой композиции все основано на поле дискриминатора. Я не предлагаю , чтобы вы реализовали свое решение таким образом, но при этом вы все равно получаете в своей ViewModel общую квитанцию. Я предлагаю вам прочитать больше об ORM, который вы используете, и о том, как вы можете представить там наследование (может быть, вы сначала используете базу данных, а не код, и вам придется обрабатывать вещи вручную, потому что база данных не была разработана таким образом. и вам нужно использовать подход, аналогичный тому, что я предложил. Но если у вас есть возможность создать свои классы POCO и создать базу данных, определенно стоит взглянуть на то, как они реализуют наследование.
Здесь Я прилагаю ссылку о том, как эта проблема решается в EntityFramework 6
Стратегия наследования в Entity Framework 6
Надеюсь, это поможет