• 1398/11/19

افزودن رکورد به دیتابیس دیتچ شده :

استاد مدائنی عزیز، سلام؛

من در یک پروژه برای بانک اطلاعاتی، یک دیتابیس ساختم و دیتچ کردم و در روت پروژه قرار دادم.

بعد با Entity به پروژه اضافه کردم.

از GenericRepository که شما آموزش داده بودید استفاده کردم تا مقادیر رو به این دیتابیس اضافه کنم.

مشکل اینجاست که مقادیر تا زمانی که برنامه باز هست، در جدول وجود دارن!! و پس از بستن برنامه جداول کاملا پاک میشه.

میشه مثل همیشه لطف بفرمایید و راهنمایی کنید.

 

سپاس فراوان

  • 1398/11/19
  • ساعت 17:40

سلام 

SaveChanges کردید ؟


  • 1398/11/20
  • ساعت 07:39

استاد شرمنده! اشتباهی دستم به «جواب درست» خورد!!!

بله استاد! Save Change رو هم انجام دادم!


  • 1398/11/20
  • ساعت 07:41

نمونه کد رو قرار بدید


  • 1398/11/20
  • ساعت 07:47

جنریک ریپوزیتوری:

using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Linq.Expressions;
using WpfAmvaj.Models;

namespace WpfAmvaj.Repositories
{
    public class LoginGenericRepository<TEntity> where TEntity : class
    {
        private LoginCredentialsEntities _db;
        private DbSet<TEntity> _dbSet;

        public LoginGenericRepository(LoginCredentialsEntities db)
        {
            _db = db;
            _dbSet = _db.Set<TEntity>();
        }

        public virtual IEnumerable<TEntity> GetAll(Expression<Func<TEntity, bool>> where = null)
        {
            IQueryable<TEntity> query = _dbSet;
            if (where != null)
            {
                query = query.Where(where);
            }
            return query.ToList();
        }

        public virtual TEntity GetById(object iD)
        {
            return _dbSet.Find(iD);
        }

        public virtual void Insert(TEntity entity)
        {
            _dbSet.Add(entity);
        }

        public virtual void Delete(TEntity entity)
        {
            if (_db.Entry(entity).State == EntityState.Detached)
            {
                _dbSet.Attach(entity);
            }
            _dbSet.Remove(entity);
        }

        public virtual void Delete(object iD)
        {
            var entity = GetById(iD);
            Delete(entity);
        }

        public virtual void Update(TEntity entity)
        {
            if (_db.Entry(entity).State == EntityState.Detached)
            {
                _dbSet.Attach(entity);
            }
            _db.Entry(entity).State = EntityState.Modified;
        }
    }
}

کانتکست:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using WpfAmvaj.Models;
using WpfAmvaj.Repositories;

namespace WpfAmvaj.Context
{
    public class Credentials : IDisposable
    {
        LoginCredentialsEntities db = new LoginCredentialsEntities();


        private LoginGenericRepository<LoginCredential> _loginCredentialRepository;

        public LoginGenericRepository<LoginCredential> LoginCredentialRepository
        {
            get
            {
                if (_loginCredentialRepository == null)
                {
                    _loginCredentialRepository = new LoginGenericRepository<LoginCredential>(db);
                }
                return _loginCredentialRepository;
            }
        }

        public void Save()
        {
            db.SaveChanges();
        }

        public void Dispose()
        {
            db.Dispose();
        }
    }
}

رویداد دکمه:

 private void btnLogin_Click(object sender, RoutedEventArgs e)
        {
            string userName;

            if (txtUserName.Visibility == Visibility.Visible)
            {
                userName = txtUserName.Text;
            }
            else
            {
                userName = cmbUserName.SelectedValue.ToString();
            }

            if (chbSaveUserName.IsChecked == true)
            {

                using (Credentials cr = new Credentials())
                {
                    LoginCredential ceredential = new LoginCredential() { UserName = userName };
                    cr.LoginCredentialRepository.Insert(ceredential);
                    cr.Save();
                }
            }

 


  • 1398/11/20
  • ساعت 09:05

کد درسته 

دیباگ کنید 


  • 1398/11/20
  • ساعت 09:13

برای این کار،

یک پنجره ی جدید ایجاد کردم با یک TextBox یک دکمه و یک گرید برای نمایش اطلاعات جدول

در رویداد دکمه کد های زیر رو زدم:

private void btnInsert_Click(object sender, RoutedEventArgs e)
        {
            using (Credentials cr=new Credentials())
            {
                LoginCredential login = new LoginCredential() { UserName = txtUserName.Text };
                cr.LoginCredentialRepository.Insert(login);
                cr.Save();
                dgUsers.ItemsSource = cr.LoginCredentialRepository.GetAll();
            }
        }

اطلاعات به درستی ذخیره و در گرید نمایش داده میشه. یعنی در دیتا بیس ذخیره میشه و بعد در گرید نمایش داده میشه.

 

احتمال میدید دیتابیسی که دیتچ شده اشکالی داشته باشه! آیا روش خاصی برای دیتچ کردن وجود داره؟


  • 1398/11/20
  • ساعت 12:17

ممکنه بانک متفاوت شده باشه 

بانک اجرا با بانک اصضلی تفاوت داشته باشه 

بررسی کنید 


  • 1398/11/21
  • ساعت 08:28

استاد مدائنی عزیز،

از بردباری شما بسیار سپاسگزارم.

من یک پروژه ی جدید با یک بانک جدید ساختم، اما نتیجه همان شده!

اگر لطف بفرمایید و پروژه رو بازبینی کنید ممنونم میشم.

لینک پروژه:

http://s7.picofile.com/file/8387706376/WpfLogin.rar.html

 

سپاس فراوان


  • 1398/11/21
  • ساعت 08:42

من زمانم بسیار محدود 

وقت کنم بررسی میکنم 

با گوشی جواب سوال میدم 


  • 1398/11/21
  • ساعت 08:47

از اینکه زمان می گذارید و پاسخ میدید واقعا سپاسگزارم،

زمان شما بسیار ارزشمند هست و من به این امر واقف هستم.

برای قرار دادن این قسمت در پروژه ی خودم عجله ای ندارم.

هر زمان صلاح دیدید بررسی کنید.

باز هم از اینکه زمان ارزشمند خودتون رو برای پاسخ گویی می گذارید از صمیم قلب سپاسگزارم.

 


  • 1398/12/10
  • ساعت 11:10

استاد مدائنی عزیز، سلام؛

امیدوارم این پست رو بخونید.

می خواستم بدونه که آیا فرصت داشتید این پروژه رو بررسی کنید؟

 

سپاس فراوان


  • 1398/12/10
  • ساعت 11:23

خیر متاسفانه هنوز زمان خالی گیرم نیومده 


  • 1399/01/09
  • ساعت 08:20

استاد مدائنی عزیز، سلام؛

امیدوارم در شرایط موجود و بیماری کرونا، سلامت باشید.

خواستم یادآوری کنم، در صورتی که فرصت دارید، این مشکل رو بررسی کنید.

 

سپاسگزارم