powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Посоветуйте open-source проект на ASP.net MVC
25 сообщений из 30, страница 1 из 2
Посоветуйте open-source проект на ASP.net MVC
    #38897184
xxxTIMxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите какой-нибудь проект на ASP.net MVC, в который можно попялиться, чтобы подчерпнуть какие-нибудь моменты?
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38897191
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xxxTIMxxxПодскажите какой-нибудь проект на ASP.net MVC, в который можно попялиться, чтобы подчерпнуть какие-нибудь моменты?

orchardproject.net
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38897359
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38897478
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38897483
xxxTIMxxx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо!
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38899016
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt http://piranhacms.org/

Отзываю свой совет, повёлся на распространяемость CMS через NuGet. Открыл исходники, посмотрел. Ну и говнище. Не рекомендуется изучать по этим исходникам. Черпать там нечего совершенно.

Разве что упаковку веб-компонентов в NuGet распространяемые пакеты — это как раз сделано неплохо.

handmadeFromRu https://nopcommerce.codeplex.com/

Достаточно хорошая организация кода, всё по слоям, репозитории, бизнес-логика, всё по феншую. Проблемы — достаточно сильный оверхед по коду. Сервисы для доступа к данным повторяют друг друга, далеко не идеально, в общем для обучения вообще самое то, но местами может немного навредить неокрепшему мозгу, если его владелец начнёт бездумно копипастить архитектуру и куски кода. Рекомендую для изучения.

Абсолют orchardproject.net

Для новичка будет сложновато. Но для дотнетчика может являться практическим мастхевом для изучения. Если джуниор разобрался с устройством Orchada, это очень показательно, считаю. Рекомендую для изучения.

В довесок:

http://umbraco.com/

Тож самое. Отличный guid, особенно если проследить эволюцию развития, начиная с 4-ой версии и до «наших дней». В последней версии админка на AngularJS, так что можно убить двух зайцев в обучении (правда одминка немного туповатая, тормозная и глючная, в целом ОК). Тоже рекомендую для изучения.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38899081
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt(правда одминка немного туповатая, тормозная и глючная, в целом ОК).
повеселил
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38899089
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилhVostt(правда одминка немного туповатая, тормозная и глючная, в целом ОК).
повеселил

ето правда, туповатая, тормозная и глючная, но юзабельная. значит ОК. может допилят ))
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909010
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
всем привет. что бы не плодить тем напишу наверно тут. скачал указанные проекты. посмотрел orchard - ну не то что бы совсем не понятно, но непонятно. noopCommerce показался попроще.сразу возникли вопросы: в инете если смотреть то кто то пишет что лучше делать абстрактный репозиторий кто то что наоборот, как ВЫ считаете?
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909016
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rusвсем привет. что бы не плодить тем напишу наверно тут. скачал указанные проекты. посмотрел orchard - ну не то что бы совсем не понятно, но непонятно. noopCommerce показался попроще.сразу возникли вопросы: в инете если смотреть то кто то пишет что лучше делать абстрактный репозиторий кто то что наоборот, как ВЫ считаете?

а что надо-то?
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909025
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVostt, мне непонятно как делать правильней/лучше/...

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public interface IUserRepository
{

}
 ///либо же делают так

public interface IRepository<T> where T: class
{

}


т.е. в одно случае интерфейс репозитория один на всех, в другом на каждую сущность свой репозиторий.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909050
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus,

Код: c#
1.
2.
3.
4.
public interface IUserRepository: IRepository<User>
{

}



dependency

Код: c#
1.
2.
3.
SomeContainer.Register<UserRepository>()
    .As<IUserRepository>()
    .As<IRepository<User>>();



как-то так.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909334
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt
Код: c#
1.
2.
3.
SomeContainer.Register<UserRepository>()
    .As<IUserRepository>()
    .As<IRepository<User>>();


как-то так.
ну пример не очень так как можно написать без лишней сущности вроде как
Код: c#
1.
2.
SomeContainer.Register<UserRepository>()
    .As<IRepository<User>>();


в копилку http://www.bettercms.com но толи мне показалось толи какой то другой вид cqrs.
чисто мое имхо я пытаюсь понять написание как раз через cqrs. Александр Бындю был толчком в этом направление и его блок(если кому интересно тык )
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909629
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuну пример не очень так как можно написать без лишней сущности вроде как
Код: c#
1.
2.
SomeContainer.Register<UserRepository>()
    .As<IRepository<User>>();



Не совсем. IRepository<> получают либо универсальные дженерики-сервисы, либо кому за глаза хватает базового интерфейса репо. но IUserRepository может предоставлять дополнительные методы, например для работы с иерархией (в linq нет cte), или оптимизированные версии специальных запросов.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909650
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
handmadeFromRuчисто мое имхо я пытаюсь понять написание как раз через cqrs. Александр Бындю был толчком в этом направление и его блок(если кому интересно тык )

пробовалось. в итогге все плюсы тонут (в буквальном смысле ) в огромной массе кода, нужного только для поддержки паттерна. т.е. на 90% оверхеда приходится максимум 10% полезной нагрузки. дженерики, t4 и прочие ухищрения приводят к тому, что более менее прилично ся чувствует только прикладной программист. считаю, что здесь не соблюдается баланс и абстракции очень быстро начинают протекать. хотя зависит от проекта и задач.

но возможно это от того, что Бындю представляет себе реализацию репозитория, которую я лично не приемлю (наборы методов типа GetAllUsers, GetUsersFromNirvana, GetLastUsers, GetUserFriends — вот это действительно ад и пламя), поверх репо лучше выглядят сервисы построенные на fluent Query Builder's или Query Object's.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909672
handmadeFromRu
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,
по первому комментарию: я не учел доп методы откуда и вытекают порой жирные репо,да извиняюсь.
по второму: ну как я понял он пытался убрать проблему жирных репо + принципе единственности ответственности. Но так как я не использовал в реальном проекте и сижу пока на репо(порой жирные) + сервисы не могу судить профита. А оверхед код пугает от внедрения да
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909757
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за ответы, а можно я еще спрошу из Выше написанного, и того что я прочитал в "инете" надо делать как то так:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public interface IRepository<T> where T: class
{
        ///Здесь базовый функционал Вставить/Удалить/Редактировать
        T GetById(object id);
        void Insert(T entity);
        void Update(T entity);
        void Delete(T entity);
}

public interface IEntityRepository: IRepository<Entity>
{
        ///судя по всему здесь должно быть специфическое для сущности
        ///Что то типа получить список за период
}


я правильно уловил смысл???
P.S.: если что сильно не пинайте я тока учусь:)
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909846
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rus
Код: c#
1.
2.
3.
4.
5.
public interface IEntityRepository: IRepository<Entity>
{
        ///судя по всему здесь должно быть специфическое для сущности
        ///Что то типа получить список за период
}



Не совсем так. Здесь должны быть специфические для хранилища методы. Например, метод возвращающий некий срез информации, который получить путём LINQ либо сложно, либо никак, либо очень тормозно. Т.е. представляй себе это как некую проекцию процедуры T-SQL/PL-SQL.

А такие вещи, как «получить список за период» легко решаются более высокой абстракцией на уровне сервисов, использующих репозиторий:

Код: c#
1.
2.
3.
4.
5.
var repo = SomeContainer.Resolve<IEntityRepository>();

var data = from p in repo.Query()
               where p.Created > DateTime.Now.AddDays(-1)
               select p;



Т.е. по сути, репозиторий решает только одну задачу: предоставляет доступ к хранилищу (добавить запись, получить запись, обновить запись, выполнить запрос).

Никакой логике в репозитории не должно быть. Репозиторий нужен для того, чтобы максимально абстрагироваться от способа хранения данных. И всё.

Как ты будешь использовать репо, это уже вопрос другой. Можно например так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
var service = SomeContainer.Resolve<IEntityService>();

var qb = service.GetQueryBuilder();

var list = qb
  .WithCreateDate(from: DateTime.Now.AddDays(-1), to: null)
  .WithCreateBy(someUserId)
  .WithEmailConfirmed()
  .Page(pageNum, pageSize, out total)
  .GetList();



ну это так , примитивный пример навскидку, или можно пилить стратегии, Query Object-ы и прочие обстракции. но репо должен быть как можно проще. простой как палка. при необходимости местами можно усложнять, но для этого должны быть причины (например, высокие требования к производительности, с использованием специфичных запросов).

это то, к чему мы сейчас пришли, хотя теорий очень много, как надо правильно.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38909959
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
спасибо за разъяснения, буду смотреть исходники NoopCommerce дальше
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38915933
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Уважаемые эксперты, помогите разобраться в следующем:
смотрю исходники noopcommerce касающиеся доступа к данным

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public interface IDbContext
    {
        /// <summary>
        /// Get DbSet
        /// </summary>
        /// <typeparam name="TEntity">Entity type</typeparam>
        /// <returns>DbSet</returns>
        DbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity;

        /// <summary>
        /// Save changes
        /// </summary>
        /// <returns></returns>
        int SaveChanges();
    }



реализация контекста
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
public class NopObjectContext : DbContext, IDbContext
    {
        #region Ctor

        public NopObjectContext(string nameOrConnectionString)
            : base(nameOrConnectionString)
        {
            //((IObjectContextAdapter) this).ObjectContext.ContextOptions.LazyLoadingEnabled = true;
        }
        
        #endregion

        /// <summary>
        /// Get DbSet
        /// </summary>
        /// <typeparam name="TEntity">Entity type</typeparam>
        /// <returns>DbSet</returns>
        public new IDbSet<TEntity> Set<TEntity>() where TEntity : BaseEntity
        {
            return base.Set<TEntity>();
        }
        
        
    }




Реализация репозитория
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
public partial class EfRepository<T> : IRepository<T> where T : BaseEntity
    {
        #region Fields

        private readonly IDbContext _context;
        private IDbSet<T> _entities;

        #endregion

        #region Ctor

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="context">Object context</param>
        public EfRepository(IDbContext context)
        {
            this._context = context;
        }
        
        #endregion
        
        #region Methods

        /// <summary>
        /// Get entity by identifier
        /// </summary>
        /// <param name="id">Identifier</param>
        /// <returns>Entity</returns>
        public virtual T GetById(object id)
        {
            //see some suggested performance optimization (not tested)
            //http://stackoverflow.com/questions/11686225/dbset-find-method-ridiculously-slow-compared-to-singleordefault-on-id/11688189#comment34876113_11688189
            return this.Entities.Find(id);
        }

        /// <summary>
        /// Update entity
        /// </summary>
        /// <param name="entity">Entity</param>
        public virtual void Update(T entity)
        {
            try
            {
                if (entity == null)
                    throw new ArgumentNullException("entity");

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }        
        #endregion

        #region Properties

        /// <summary>
        /// Gets a table
        /// </summary>
        public virtual IQueryable<T> Table
        {
            get
            {
                return this.Entities;
            }
        }

        /// <summary>
        /// Entities
        /// </summary>
        protected virtual IDbSet<T> Entities
        {
            get
            {
                if (_entities == null)
                    _entities = _context.Set<T>();
                return _entities;
            }
        }

        #endregion
    }



фактического обновления данных в базе не происходит, я так понимаю потому что контекст не знает что запись изменилась. подскажите пож. как реализовать возможность обновления в базе. заранее спасибо
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38915949
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rusфактического обновления данных в базе не происходит, я так понимаю потому что контекст не знает что запись измениласьА почему не знает? Откуда Вы получаете entity перед сохранением? Создаёте через new?
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38915977
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Контроллер
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
public class RackController : Controller
    {
        private IRackService _rackService;

        public RackController(IRackService rackService)
        {
            this._rackService = rackService;
        }

        // GET: Rack
        public ActionResult Index()
        {
            Mapper.CreateMap<Rack,RackListModel>();
            var model = _rackService.GetAllRacks();
            var racks = Mapper.Map<IEnumerable<Rack>, IEnumerable<RackListModel>>(model);
            return View(racks);
        }

        public ActionResult Create()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Create(RackEditModel rack)
        {
            Mapper.CreateMap<RackEditModel, Rack>();
            if (ModelState.IsValid)
            {
                var _rack = Mapper.Map<RackEditModel, Rack>(rack);
                _rackService.InsertRack(_rack);
                return RedirectToAction("Index");
            }
            return View(rack);
        }

        public ActionResult Edit(int id)
        { 
            Mapper.CreateMap<Rack, RackEditModel>();
            var _rack = _rackService.GetRackById(id);
            var rack = Mapper.Map<Rack, RackEditModel>(_rack);
            return View(rack);
        }

        [HttpPost]
        public ActionResult Edit(RackEditModel rack)
        {
            if (ModelState.IsValid)
            {
                Mapper.CreateMap<RackEditModel, Rack>();
                var _rack = Mapper.Map<RackEditModel, Rack>(rack);
                _rackService.UpdateRack(_rack);
                return RedirectToAction("Index");
            }
            return View(rack);
        }



слой Service
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
public interface IRackService
    {
        Rack GetRackById(int rackId);

        IEnumerable<Rack> GetAllRacks();

        void InsertRack(Rack rack);

        void UpdateRack(Rack rack);

        void DeleteRack(Rack rack);
    }
public class RackService: IRackService
    {
        #region Fields
        private IRepository<Rack> _rackRepository;
        #endregion

        #region Конструктор
        public RackService(IRepository<Rack> rackRepository)
        {
            this._rackRepository = rackRepository;
        }
        #endregion
        
        public Rack GetRackById(int rackId)
        {
            if (rackId == 0)
                return null;
            return _rackRepository.GetById(rackId);
        }

        public IEnumerable<Rack> GetAllRacks()
        {
            return _rackRepository.Table.ToList();
        }

        public void InsertRack(Rack rack)
        {
            if (rack == null)
                throw new NullReferenceException("rack");
            _rackRepository.Insert(rack);
        }

        public void UpdateRack(Rack rack)
        {
            if (rack == null)
                throw new NullReferenceException("rack");
            _rackRepository.Update(rack);
        }

        public void DeleteRack(Rack rack)
        {
            if (rack == null)
                throw new NullReferenceException("rack");
            _rackRepository.Delete(rack);
        }
    }



т.е. получаю необходимую мне запись через сервисный слой, редактирую в представлении, и вызываю метод update. я наверно не правильно выразился, контекст не знает об изменениях потому что я ему об это не сказал, т.е. не сделал
Код: c#
1.
context.Entry(entity).State = EntityStates.Modified;

а проблема в том что при данной организации я не знаю как это сделать.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38915999
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в примерах который я находил в инете перед SaveChanges() делают
Код: c#
1.
2.
context.Set<T>.Attach(Entity);
context.SaveChanges();


но сохранения все равно не происходит
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38916059
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
bald56rusт.е. получаю необходимую мне запись через сервисный слой, редактирую в представлении, и вызываю метод update.Не вижу что Вы что-то здесь получаете через сервисный слой:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
[HttpPost]
public ActionResult Edit(RackEditModel rack)
{
    if (ModelState.IsValid)
    {
        Mapper.CreateMap<RackEditModel, Rack>();
        var _rack = Mapper.Map<RackEditModel, Rack>(rack);
        _rackService.UpdateRack(_rack);
        return RedirectToAction("Index");
     }
     return View(rack);
}


Внутри UpdateRack (в репозитории) необходимо прикрепить (attach) _rack к контексту. Ну или выполнить команду UPDATE самостоятельно.
...
Рейтинг: 0 / 0
Посоветуйте open-source проект на ASP.net MVC
    #38916103
bald56rus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Реализация класса репозитория
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
122.
123.
124.
125.
126.
127.
128.
129.
130.
131.
132.
133.
134.
135.
136.
137.
138.
139.
140.
141.
142.
143.
144.
145.
146.
147.
148.
149.
150.
151.
152.
153.
154.
155.
156.
157.
158.
159.
160.
161.
162.
163.
164.
165.
166.
167.
168.
169.
170.
171.
172.
173.
174.
175.
176.
177.
178.
179.
180.
181.
182.
183.
184.
185.
186.
187.
188.
189.
190.
191.
192.
193.
194.
195.
196.
197.
198.
199.
200.
201.
202.
203.
204.
205.
206.
207.
208.
209.
210.
211.
212.
213.
public class EfRepository<T>: IRepository<T> where T: BaseEntity
    {
        #region Fields

        private readonly IDbContext _context;
        private IDbSet<T> _entities;

        #endregion

        #region Ctor

        /// <summary>
        /// Ctor
        /// </summary>
        /// <param name="context">Object context</param>
        public EfRepository(IDbContext context)
        {
            this._context = context;
        }

        #endregion

        #region Methods

        /// <summary>
        /// Get entity by identifier
        /// </summary>
        /// <param name="id">Identifier</param>
        /// <returns>Entity</returns>
        public virtual T GetById(object id)
        {
            //see some suggested performance optimization (not tested)
            //http://stackoverflow.com/questions/11686225/dbset-find-method-ridiculously-slow-compared-to-singleordefault-on-id/11688189#comment34876113_11688189
            return this.Entities.Find(id);
        }

        /// <summary>
        /// Insert entity
        /// </summary>
        /// <param name="entity">Entity</param>
        public virtual void Insert(T entity)
        {
            try
            {
                if (entity == null)
                    throw new ArgumentNullException("entity");

                this.Entities.Add(entity);

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }

        /// <summary>
        /// Insert entities
        /// </summary>
        /// <param name="entities">Entities</param>
        public virtual void Insert(IEnumerable<T> entities)
        {
            try
            {
                if (entities == null)
                    throw new ArgumentNullException("entities");

                foreach (var entity in entities)
                    this.Entities.Add(entity);

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage) + Environment.NewLine;

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }

        /// <summary>
        /// Update entity
        /// </summary>
        /// <param name="entity">Entity</param>
        public virtual void Update(T entity)
        {
            try
            {
                if (entity == null)
                    throw new ArgumentNullException("entity");

                this.Entities.Attach(entity);

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }

        /// <summary>
        /// Delete entity
        /// </summary>
        /// <param name="entity">Entity</param>
        public virtual void Delete(T entity)
        {
            try
            {
                if (entity == null)
                    throw new ArgumentNullException("entity");

                this.Entities.Remove(entity);

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }

        /// <summary>
        /// Delete entities
        /// </summary>
        /// <param name="entities">Entities</param>
        public virtual void Delete(IEnumerable<T> entities)
        {
            try
            {
                if (entities == null)
                    throw new ArgumentNullException("entities");

                foreach (var entity in entities)
                    this.Entities.Remove(entity);

                this._context.SaveChanges();
            }
            catch (DbEntityValidationException dbEx)
            {
                var msg = string.Empty;

                foreach (var validationErrors in dbEx.EntityValidationErrors)
                    foreach (var validationError in validationErrors.ValidationErrors)
                        msg += Environment.NewLine + string.Format("Property: {0} Error: {1}", validationError.PropertyName, validationError.ErrorMessage);

                var fail = new Exception(msg, dbEx);
                //Debug.WriteLine(fail.Message, fail);
                throw fail;
            }
        }

        #endregion

        #region Properties

        /// <summary>
        /// Gets a table
        /// </summary>
        public virtual IQueryable<T> Table
        {
            get
            {
                return this.Entities;
            }
        }

        /// <summary>
        /// Entities
        /// </summary>
        protected virtual IDbSet<T> Entities
        {
            get
            {
                if (_entities == null)
                    _entities = _context.Set<T>();
                return _entities;
            }
        }

        #endregion
    }


в методе update делаю attach сохранения в базе не происходит
...
Рейтинг: 0 / 0
25 сообщений из 30, страница 1 из 2
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Посоветуйте open-source проект на ASP.net MVC
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]