Manamohan Jha Ответов: 1

Как пользоваться работать с шаблоном репозитория


Привет Гес,
у меня есть некоторые проблемы в моем шаблоне репозитория.

я хочу получить данные, включая реляционную таблицу...
как это сделать, я не знаю..
пожалуйста, помогите мне и измените мой шаблон репозитория
пожалуйста...

//Context Class

public class InstituteContext : DbContext
    {
        public InstituteContext()
            : base("InstituteContext")
        {
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges());
        }
        
        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            base.OnModelCreating(modelBuilder);
           //Map Student Table
            modelBuilder.Entity()
               .ToTable("tblstudent").Property(t => t.Id)
               .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
               .HasColumnName("studentid");
            //Map Address Table
           modelBuilder.Entity<addressdetail>()
               .Ignore(i =&gt; i.AddedBy).Ignore(i =&gt; i.AddedDate).Ignore(i =&gt;                 i.ModifiedBy).Ignore(i =&gt; i.ModifiedDate)
               .HasRequired(t=&gt;t.StudentBasicDetail)
               .WithMany(a=&gt;a.AddressDetails)
               .HasForeignKey(k=&gt;k.StudentId)
               .WillCascadeOnDelete(false)
               .ToTable("tbladdress").Property(t =&gt; t.Id)               
               .HasDatabaseGeneratedOption(DatabaseGeneratedOption.Identity)
               .HasColumnName("addressid");
        }
    }

// Student Class

public class StudentBasicDetail : BaseEntity
    {        
        [Column("fullname")]
        public string FullName { get; set; }
            
        [Column("dob")]
        public DateTime? DateOfBirth { get; set; }

        [Column("gender")]
        public string Gender { get; set; }
       
        public virtual ICollection AddressDetails { get; set; }
    }


//Address Class

public class AddressDetail : BaseEntity
    {
        [Column("studentid")]
        public Int64 StudentId { get; set; }
        
        [Column("address")]
        public string Address { get; set; }        

        [Column("addresstype")]
        public AddressType AddressType { get; set; }

        public virtual StudentBasicDetail StudentBasicDetail { get; set; }
    }

// BaseEntity Class

public abstract class BaseEntity
    {
        [Key]
        public Int64 Id { get; set; }

        [Column("addeddate")]
        public DateTime? AddedDate { get; set; }

        [Column("addedby")]
        public string AddedBy { get; set; }

        [Column("modifieddate")]
        public DateTime? ModifiedDate { get; set; }

        [Column("modifiedby")]
        public string ModifiedBy { get; set; }
    }


// Repository Class

internal interface IRepository : IDisposable where T : class
    {
        void Add(T entity);
        void Update(T entity);
        void Delete(int id);
        int Save();
        //        
        IQueryable GetAll(Expression<func>&lt;t,&gt;&gt;[] include);
        T FindById(int id);
    }

    public abstract class Repository : IRepository where T : class
    {
        private InstituteContext _context;

        protected Repository(InstituteContext context)
        {
            _context = context;
        }       

        public void Dispose()
        {
            if (_context == null) return;
            _context.Dispose();
            _context = null;
        } 

        public virtual void Add(T t)
        {
           if (t != null)
               _context.Set().Add(t);
        }       

        public virtual void Update(T t)
        {
            if (t != null)
                _context.Entry(t).State = EntityState.Modified;
        }

        public virtual void Delete(int id)
        {
            var obj = FindById(id);
            _context.Set().Remove(obj);
        }        

        public virtual int Save()
        {
            var savecnt = _context.SaveChanges();               
            return savecnt;
        }

        public virtual IQueryable GetAll(params Expression&gt;[] includeExpressions)
        {
            var query = _context.Set().AsQueryable();
            return includeExpressions.Aggregate(query, (current, include) =&gt; current.Include(include));
        } 

        public virtual T FindById(int id)
        {
            return _context.Set().Find(id);
        }
    }


 public class InstituteRepository<t> : Repository<t> where T : class
    {
        public InstituteContext Context { get; private set; }
        public InstituteRepository(InstituteContext context)
            : base(context)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            Context = context;
        }       
    }





Спасибо и с уважением
Манамохан

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

Я стараюсь...

использование (VAR repo = new InstituteRepository< studentbasicdetail> (new InstituteContext()))
{
var srch=РЕПО.GetAll (); / / здесь ничего не показывают, как включить таблицу " AddressDetail"
}

1 Ответов

Рейтинг:
0

Manamohan Jha

Выше ссылка не полезна для меня, bcoz я не использую эту строку

public DbSet<addressdetail> AddressDetails { get; set; }

мой класс непосредственно выполняется на OnModelCreating ().
И я хочу сделать всю задачу через шаблон репозитория...

F-ES Sitecore

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