public class Hardware
{
public int id { get; set; }
public int Nodes { get; set; }
public int Repeaters { get; set; }
public int Hubs { get; set; }
}
public abstract class Repositories<T> where T:class
{
//where T:class fixes the issue with .SET
//Repository class constructor once initialized will instantiate datamodel
//Manufacturing data model instantiate because it models table
ManufacturingDataModel MDM;
public Repositories(ManufacturingDataModel mdm)
{
MDM = mdm;
}
public List<T> GetHardware()
{
//Creating new list and adding data from db in it
List<T> data = new List<T>();
foreach(var i in MDM.Set<T>())
{
data.Add(i);
}
return data;
}
public void AddHardware(T item)
{
MDM.Set<T>().Add(item);
MDM.SaveChanges();
}
public void RemoveHardware(T item)
{
MDM.Set<T>().Remove(item);
MDM.SaveChanges();
}
public void UpdateHardware(T item)
{
MDM.Set<T>().AddOrUpdate(item);
MDM.SaveChanges();
}
public class Test : Repositories<Hardware>
{
public Test(ManufacturingDataModel mdm) : base(mdm)
{
}
static void Main(string[] args)
{
ManufacturingDataModel MDM = new ManufacturingDataModel();
Test t = new Test(MDM);
Hardware hardware = new Hardware();
hardware.Nodes = 55;
hardware.Repeaters = 46;
hardware.Hubs = 82;
t.AddHardware(hardware); // WORKS
t.RemoveHardware(hardware); //DOES NOT WORK
リポジトリ削除は - オブジェクト私は私のdbテーブルから項目を削除/追加する作業リポジトリを作成しようとしている
が見つかりません。私が直面している問題は、addメソッドは完全に機能しますが、removeは機能しないということです。画像に示されているremoveメソッドの問題は、オブジェクトが存在しないことです。 私はDeleteObjectとAttachに私のremoveメソッドを変更するなど、何かを試しましたが、何も動作していないようです。 アイデア ADO - >コード最初 - > EF - >レポクラス
お客様のシナリオでは、「item.Id」情報がある場合、エンティティに再度照会する必要はありません。データベースに2回ヒットします。 – lucky
ここではhttps://msdn.microsoft.com/en-us/library/system.data.entity.dbset.remove(v=vs.113).aspxを読むことができます。 'Remove' *指定されたエンティティをマークしますSaveChangesが呼び出されたときにデータベースから削除されるように、Deletedとして削除します。 **このメソッドが呼び出される前に、エンティティがコンテキスト内に存在していなければなりません。*通常、誰かがアイテムの削除を要求すると、これはコンテキスト内ではありません。これが私がそう言った理由で、OPがこのエラーを見る理由です。 – Christos
はい、あなたは正しいです。エンティティを削除しようとする前に、コンテキスト内に存在するようにエンティティをアタッチする必要があります。私は自分の答えを更新しました。 – lucky