PDA

View Full Version : سوال: مشکل در ذخیره اطلاعات با ninject



aroshanzamir
جمعه 11 مهر 1393, 23:34 عصر
سلام دوستان

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

تو سایت آقای نصیری این مطلب را خوندم ولی آقای نصیری با Structuremap کرده بود و مشکلی نداشت ولی من باید از innject استفاده کنم راهنمایی کنید
ممنون

1-DomainClasses


public class Student
{
public int Id { get; set; }
public string Name { get; set; }
public string Family { get; set; }
}



2-DataLayer


public interface IUnitOfWork
{
IDbSet<TEntity> Set<TEntity>() where TEntity : class;
int SaveChanges();
}


public class DataContext : DbContext, IUnitOfWork
{
public DbSet<Student> Students { get; set; }


public new IDbSet<TEntity> Set<TEntity>() where TEntity : class
{
return base.Set<TEntity>();
}
public int SaveChanges()
{
return base.SaveChanges();
}
}


public sealed class Configuration : DbMigrationsConfiguration<UOW.DataLayer.Context.DataContext>
{
public Configuration()
{
this.AutomaticMigrationsEnabled = true;
this.AutomaticMigrationDataLossAllowed = true;
}


protected override void Seed(UOW.DataLayer.Context.DataContext context)
{
context.Students.AddOrUpdate(x => new { x.Name, x.Family },
new Student { Name = "AR", Family = "BY" },
new Student { Name = "Mitra", Family = "Hejazi" },
new Student { Name = "Mohammad", Family = "Akbari" });
}
}







3-ServiceLayer



public interface IStudentService
{
List<Student> GetAllStudent();
void AddStudent(Student student);


}
public class StudentService : IStudentService
{
IUnitOfWork _uow;
readonly IDbSet<Student> _students;
public StudentService(IUnitOfWork uow)
{
_uow = uow;
_students = _uow.Set<Student>();
}
public List<Student> GetAllStudent()
{
return _students.ToList();
}
public void AddStudent(Student student)
{
_students.Add(student);
}
}




در فایل global



public class NinjectControllerFactory : DefaultControllerFactory
{
private IKernel ninjectKernal;
public NinjectControllerFactory()
{
ninjectKernal = new StandardKernel();
AddBindings();
}


private void AddBindings()
{
ninjectKernal.Bind<IUnitOfWork>().To<DataContext>();
ninjectKernal.Bind<IStudentService>().To<StudentService>();
}
protected override IController GetControllerInstance(RequestContext requestContext,
Type controllerType)
{
return controllerType == null ? null :
(IController)ninjectKernal.Get(controllerType);
}
}


این خط کد هم به Application_start اضافه شده :



Database.SetInitializer(new MigrateDatabaseToLatestVersion
<DataContext,Configuration>());


ControllerBuilder.Current.SetControllerFactory(new NinjectControllerFactory());




کنترولر برنامه :




public class HomeController : Controller
{
private readonly IStudentService _studentService;
private readonly IUnitOfWork _uow;
public HomeController(IUnitOfWork uow, IStudentService studentservice)
{
_uow = uow;
_studentService = studentservice;
}
[HttpGet]
public ActionResult Index()
{
var list = _studentService.GetAllStudent();
return View(list);
}
[HttpPost]
public ActionResult Index(Student student)
{
_studentService.AddStudent(student);
_uow.SaveChanges();
return RedirectToAction(actionName: "Index", controllerName: "Home");
}


}




اطلاعات پیش فرضی که در متد seed وارد کردیم را نشون میده ولی وقتی اطلاعات جدید را می خواهیم اضاف کنیم درج نمی کنه

فقط SaveChae را انجام نمیده و 0 بر میگردونه

دوستان دمتون گرم راهنمایی کنید
سپاس از همه شما

ali_autumnal
دوشنبه 21 مهر 1393, 19:30 عصر
پس از آخرین دستور از متد SaveChange استفاده نکردید


public void AddStudent(Student student)
{
_students.Add(student);
_uow.SaveChanges();
}