Реализовать репозиторий с помощью ADO.NET и Линк
Я хочу реализовать операцию сохранения(вставка/обновление) следующим образом:
Эми п = новый пуп();
n.Srl=1;
n.Name = "Мэтью";
Н.Сохранить();
Я должен передать entity в качестве параметра для сохранения функции, и она работает правильно, но очень уродливо!!!... пример: n.Save(n)
класс моделей :
public class Emp :Classes.Repository<Emp> { private int srl; public int Srl { set { srl = value; } get { return srl; } } private string name; public string Name { set { name = value; } get { return name; } } }
public class Repository<T> : IRepository<T> where T : class { public SDataAccess Conn { get; private set; } public void Save(T entity) { if (entity == null) { throw new ArgumentNullException("entity", "Add to DB null entity"); } //extention Methods var res = Conn.Save(entity); } public IEnumerable<T> GetAll() { throw new NotImplementedException(); } }
Что я уже пробовал:
Я реализую функцию сохранения в библиотеке DAL следующим образом :
например :
ЭМП = новый пуп();
при вызове нового ключевого слова я вызываю функцию Insert else Update Function
и правильно бегать.
Maciej Los
Поскольку репозиторий-это тип Emp, вы можете использовать что-то вроде:
public void Save() { if (this == null) { throw new NullReferenceException("Add to DB null entity"); } else { Console.WriteLine("save action!"); } }
Но первый оператор if никогда не будет достигнут, если вы попытаетесь вызвать метод Save для неинициализированной переменной Emp. Вы получите исключение NullReference:
Emp m = null; m.Save(); //here - NullReferenceException!
С другой стороны,
Repository
это должна быть коллекция (или список, или массив) сущностей.Наконец, я бы настоятельно рекомендовал реализовать 2 различных метода для вставки и обновления.
Maciej Los
Посмотрите на это: Ограничения на параметры типа (руководство по программированию на C#) | Microsoft Docs[^]