K I R T I Ответов: 2

Универсальный шаблон репозитория


Как создать универсальный шаблон репозитория в asp.net mvc

Что я уже пробовал:

Я пытаюсь создать шаблоны репозитория, но не могу их создать

K I R T I

пространство имен WebApplication1.Контроллеры
{
видеоконтроллер публичного класса : контроллер
{
// Получить: видео
индекс public ActionResult()
{
Videocontext entity = новый VideoContext();
var data = сущность.Видео.Список();
return View(данные);
}

// Сделать: видео/создать
public ActionResult Create()
{
возвращение смотреть();
}

// Пост: видео / создать
[HttpPost]
public ActionResult Create(модель VideoViewModel)
{
пробовать
{
if (ModelState.Функция IsValid)
{
var uploadFilesDir = сервер.MapPath ("~/Video");
var fileSavePath = путь.Combine (uploadFilesDir, model. file.имя файла);

int length = model. file.ContentLength;
byte [] video = Новый байт[длина];

модель.файл.InputStream. Read(видео, 0, длина);
модель.файл.Сохранить как(fileSavePath);

Видео.DataModel.Video obj = новое видео.DataModel.Видео();
параметр obj.VideoName = модель.Видеоигра;
параметр obj.VideoPath = модель.файл.имя файла;
об..Изображение = видео;

Videocontext entity = новый VideoContext();
сущность.Видео.Добавить(объект);
сущность.SaveChanges();

return RedirectToAction ("индекс");
}

возвращение смотреть();
}
поймать (исключение бывший)
{
возвращение смотреть();
}
}

[HttpGet]
общественная ActionResult вызваны функции playvideo(инт звукозапись)
{
Videocontext entity = новый VideoContext();
var data = сущность.Видео.Где (x => x.Видеоид.Равно(Звукозапись)).Метода firstordefault();
var base64 = конвертировать.ToBase64String(data.Изображение);
var imgSrc = строка.Формат ("данные: видео/mp4;base64, {0}", base64);

data. VideoPath = imgSrc;

return PartialView(data);
}

public ActionResult CreateNew()
{
возвращение смотреть();
}
}
}

2 Ответов

Рейтинг:
2

Graeme_Grant

Hedre-отличная статья для начала: Универсальный шаблон репозитория в ASP.NET MVC[^]


Рейтинг:
1

Member 13206142

If you want to create code first approach then follow below code to create generic repository pattern
 
<pre>[Table("Categories")]
    public class Category
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key()]
        public int Id { get; set; }

        [Required]
        public string Name { get; set; }

        public virtual ICollection<BlogPost> BlogPosts { get; set; }
    }

[Table("BlogPosts")]
    public class BlogPost
    {
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity), Key()]
        public int Id { get; set; }
        public string Title { get; set; }
        public string Content { get; set; }
        public DateTime PublishDate { get; set; }

        [ForeignKey("Category")]
        public int CategoryId { get; set; }

        public virtual Category Category { get; set; }
    }


public sealed class BlogContext : DbContext
    {
        static BlogContext()
        {
            Database.SetInitializer<BlogContext>(null);
        }

        public BlogContext()
            : base("name=TABFusionRMSContext")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
        }

        public DbSet<BlogPost> BlogPosts { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<StudentModel> StudentModels { get; set; }
    }


Вам нужно создать интерфейс для UnitOfWork и репозитория, как показано ниже

public interface IUnitOfWork : IDisposable
  {
      IRepository<T> Repository<T>() where T : class;
      void SaveChanges();
      void BeginTransaction();
      void RollBackTransaction();
      void CommitTransaction();
  }

  public interface IRepository<T>
  {
      IEnumerable<T> GetAll(Func<T, bool> predicate = null);
      T Get(Func<T, bool> predicate);
      void Add(T entity);
      void Attach(T entity);
      void Delete(T entity);
  }


Вам нужно реализовать эти два интерфейса

public class UnitOfWork : IUnitOfWork
    {
        private readonly BlogContext entities = null;

        private DbContextTransaction ObjectSetTransaction { get; set; }

        public UnitOfWork()
        {
            entities = new BlogContext();
        }

        //private Dictionary<Type, object> repositories = new Dictionary<Type, object>();

        //[Dependency]
        public IRepository<T> Repository<T>() where T : class
        {
            return new Repositories<T>(entities);
            //return new Repositories<T>(entities.Set<T>());

            //if (repositories.Keys.Contains(typeof(T)) == true)
            //{
            //    return (IRepository<T>)repositories[typeof(T)];
            //}

            //IRepository<T> repository = new Repositories<T>(entities);
            //repositories.Add(typeof(T), repository);
            //return repository;
        }

        public void SaveChanges()
        {
            entities.SaveChanges();
        }

        public void BeginTransaction()
        {
            ObjectSetTransaction = entities.Database.BeginTransaction();
        }

        public void RollBackTransaction()
        {
            ObjectSetTransaction.Rollback();
            ObjectSetTransaction.Dispose();

        }
        public void CommitTransaction()
        {
            ObjectSetTransaction.Commit();
            ObjectSetTransaction.Dispose();
        }

        private bool disposed = false;

        protected virtual void Dispose(bool disposing)
        {
            if (!this.disposed)
            {
                if (disposing)
                {
                    entities.Dispose();
                }
            }

            this.disposed = true;
        }

        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
    }



 public class Repositories<T> : IRepository<T> where T : class
    {
        //private readonly BlogContext entities = null;
        private readonly IDbSet<T> objectSet = null;

        public Repositories(BlogContext entities)
        {
            //this.entities = entities;
            this.objectSet = entities.Set<T>();
        }

        public Repositories(IDbSet<T> objectSet)
        {
            this.objectSet = objectSet;
        }

        public IEnumerable<T> GetAll(Func<T, bool> predicate = null)
        {
            if (predicate != null)
            {
                return objectSet.Where(predicate);
            }

            return objectSet.AsEnumerable();
        }

        public T Get(Func<T, bool> predicate)
        {
            return objectSet.FirstOrDefault(predicate);
        }

        public void Add(T entity)
        {
            objectSet.Add(entity);
        }

        public void Attach(T entity)
        {
            objectSet.Attach(entity);
        }

        public void Delete(T entity)
        {
            objectSet.Remove(entity);
        }
    }


Теперь вы можете использовать эти классы в своем контроллере с помощью создания объекта unitofwork

  [HttpPost]
        public ActionResult Create(Category model)
        {
            if (ModelState.IsValid)
            {
                try
                {
                    UnitOfWork unitOfWork = New UnitOfWork();

                    unitOfWork.BeginTransaction();

                    unitOfWork.Repository<Category>().Add(model);
                    unitOfWork.SaveChanges();

                    unitOfWork.Repository<BlogPost>().Add(new BlogPost { CategoryId = model.Id, Content = "Ahmedabad", PublishDate = DateTime.UtcNow, Title = "City" });
                    unitOfWork.SaveChanges();

                    unitOfWork.CommitTransaction();
                }
                catch
                {
                    unitOfWork.RollBackTransaction();
                }
                return RedirectToAction("List", "Home");
            }

            return View(model);
        }


        [Required]
        public HttpPostedFileBase file { get; set; }

<div class="modal-dialog">
    <!-- Modal content-->
    <div class="modal-content">
        <div class="modal-header">
            <button type="button" class="close" data-dismiss="modal">&times;</button>
            <h4 class="modal-title">@Model.VideoName</h4>
        </div>
        <div class="modal-body">
            <video width="100%" controls autoplay="autoplay">
                @*<source id="video" src='@Url.Content("~/Video/" + Model.VideoPath)' type="video/mp4">*@
                <source id="video" src="@Model.VideoPath" >
                @*<source id="video" src="@Url.Action("GetVideo", "Video", new { VideoId = Model.VideoId } )">*@
            </video>
        </div>
    </div>
</div>

<div id="myModal" class="modal fade" role="dialog">

var uploadFilesDir = Server.MapPath("~/Video");
                    var fileSavePath = Path.Combine(uploadFilesDir, model.file.FileName);

                    int length = model.file.ContentLength;
                    byte[] video = new byte[length];

                    model.file.InputStream.Read(video, 0, length);
                    model.file.SaveAs(fileSavePath);

                    Video.DataModel.Video obj = new Video.DataModel.Video();
                    obj.VideoName = model.VideoName;
                    obj.VideoPath = model.file.FileName;
                    obj.Image = video;

                    VideoContext entity = new VideoContext();
                    entity.Videos.Add(obj);
                    entity.SaveChanges();

 function PlayVideo(VideoId) {
        $.ajax({
            url: '/Video/PlayVideo',
            datatype: "html",
            type: "Get",
            data: { 'VideoId': VideoId },
            contenttype: 'application/json; charset=utf-8',
            success: function (data) {
                $("#myModal").html(data);
                $("#myModal").modal("show");
            },
            error: function (xhr) {
                alert('error');
            }
        });
    }

<pre>  <security>
      <requestFiltering>
        <requestLimits maxAllowedContentLength="1073741824" />
      </requestFiltering>
    </security>

<httpRuntime maxRequestLength="1048576" executionTimeout="3600" targetFramework="4.5" />