Я создаю простое приложение на C #. Одна из его функций - добавление счетов.
Для этой цели я создал две таблицы в своей базе данных - Invoice и InvoiceLine и использовал Entity Framework, чтобы отобразить их для меня. Мне нужно было добавить некоторые функциональные возможности для класса InvoiceLine, но я знаю, что вам не следует редактировать код, созданный Entity Framework. Вместо этого я решил наследовать от класса, созданного EF, и добавить эту функцию поверх этого класса.
Я сделал это, но теперь, когда я пытаюсь сохранить его в базе данных, я получаю сообщение об ошибке - «System.InvalidOperationException:« Не удалось найти информацию сопоставления и метаданных для EntityType «InvoiceRegister.Models.InvoiceLineModel». .
Мой вопрос - как это можно исправить? Кроме того, есть ли лучший способ достичь того, что я хотел? Я хотел сделать свой проект в MVVM, поэтому я хотел создать модель, а не выполнять функции в моей ViewModel.
Код:
Оригинальный класс (InvoiceLine):
//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated from a template.
//
// Manual changes to this file may cause unexpected behavior in your application.
// Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
namespace InvoiceRegister.Models
{
using System;
using System.Collections.Generic;
public partial class InvoiceLine
{
public int DocEntry { get; set; }
public int LineId { get; set; }
public int LineNum { get; set; }
public string ItemName { get; set; }
public double Amount { get; set; }
public int TaxPrc { get; set; }
public decimal NetAmnt { get; set; }
public decimal TaxAmnt { get; set; }
public decimal TotalAmnt { get; set; }
public decimal Price { get; set; }
public virtual Invoice Invoice { get; set; }
}
}
Мой класс. Я хочу, чтобы он наследовал от InvoiceLine:
namespace InvoiceRegister.Models
{
public class InvoiceLineModel : InvoiceLine, INotifyPropertyChanged
{
private double _amount;
public new double Amount
{
get { return _amount; }
set
{
_amount = value;
OnPropertyChanged("Amount");
OnPropertyChanged("NetAmnt");
OnPropertyChanged("TaxAmnt");
OnPropertyChanged("TotalAmnt");
}
}
private decimal _price;
public new decimal Price
{
get { return _price; }
set
{
_price = value;
OnPropertyChanged("Price");
OnPropertyChanged("NetAmnt");
OnPropertyChanged("TaxAmnt");
OnPropertyChanged("TotalAmnt");
}
}
private int _taxPrc;
public new int TaxPrc
{
get { return _taxPrc; }
set
{
_taxPrc = value;
OnPropertyChanged("TaxPrc");
OnPropertyChanged("TaxAmnt");
OnPropertyChanged("TotalAmnt");
}
}
public new decimal TaxAmnt
{
get
{
return NetAmnt* TaxPrc/100;
}
}
public new decimal NetAmnt
{
get
{
return (decimal)Amount * Price;
}
}
public new decimal TotalAmnt
{
get {return NetAmnt + TaxAmnt; }
}
public InvoiceLineModel()
{
this.LineNum = InvoiceViewModel.getNextLineNum();
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(name));
}
}
}