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

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

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

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

handmadeFromRu https://nopcommerce.codeplex.com/

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

Абсолют orchardproject.net

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

В довесок:

http://umbraco.com/

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

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

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

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

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

public interface IRepository<T> where T: class
{

}


т.е. в одно случае интерфейс репозитория один на всех, в другом на каждую сущность свой репозиторий.
...
Рейтинг: 0 / 0
18.03.2015, 20:38
    #38909050
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
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
19.03.2015, 09:08
    #38909334
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
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
19.03.2015, 12:10
    #38909629
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
handmadeFromRuну пример не очень так как можно написать без лишней сущности вроде как
Код: c#
1.
2.
SomeContainer.Register<UserRepository>()
    .As<IRepository<User>>();



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

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

но возможно это от того, что Бындю представляет себе реализацию репозитория, которую я лично не приемлю (наборы методов типа GetAllUsers, GetUsersFromNirvana, GetLastUsers, GetUserFriends — вот это действительно ад и пламя), поверх репо лучше выглядят сервисы построенные на fluent Query Builder's или Query Object's.
...
Рейтинг: 0 / 0
19.03.2015, 12:33
    #38909672
handmadeFromRu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
hVostt,
по первому комментарию: я не учел доп методы откуда и вытекают порой жирные репо,да извиняюсь.
по второму: ну как я понял он пытался убрать проблему жирных репо + принципе единственности ответственности. Но так как я не использовал в реальном проекте и сижу пока на репо(порой жирные) + сервисы не могу судить профита. А оверхед код пугает от внедрения да
...
Рейтинг: 0 / 0
19.03.2015, 13:17
    #38909757
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
спасибо за ответы, а можно я еще спрошу из Выше написанного, и того что я прочитал в "инете" надо делать как то так:
Код: 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
19.03.2015, 14:00
    #38909846
hVostt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
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
19.03.2015, 14:53
    #38909959
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
спасибо за разъяснения, буду смотреть исходники NoopCommerce дальше
...
Рейтинг: 0 / 0
25.03.2015, 09:23
    #38915933
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
Уважаемые эксперты, помогите разобраться в следующем:
смотрю исходники 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
25.03.2015, 09:33
    #38915949
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
bald56rusфактического обновления данных в базе не происходит, я так понимаю потому что контекст не знает что запись измениласьА почему не знает? Откуда Вы получаете entity перед сохранением? Создаёте через new?
...
Рейтинг: 0 / 0
25.03.2015, 09:52
    #38915977
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
Контроллер
Код: 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
25.03.2015, 10:07
    #38915999
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
в примерах который я находил в инете перед SaveChanges() делают
Код: c#
1.
2.
context.Set<T>.Attach(Entity);
context.SaveChanges();


но сохранения все равно не происходит
...
Рейтинг: 0 / 0
25.03.2015, 10:38
    #38916059
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
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
25.03.2015, 10:52
    #38916103
bald56rus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Посоветуйте open-source проект на ASP.net MVC
Реализация класса репозитория
Код: 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
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / Посоветуйте open-source проект на ASP.net MVC / 25 сообщений из 30, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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