PDA

View Full Version : گفتگو: بررسی نکات "سیستم مدیریت محتوای IRIS"



alireza_rashvand
شنبه 05 مهر 1393, 18:07 عصر
با سلام
چند روزه کد های "سیستم مدیریت محتوای IRIS (http://www.dotnettips.info/projects/details/13)" رو نگاه می کنم واقعا برای ایده گرفتن و یادگیری بسیار مناسبه...
به نظرم رسید این تاپیک رو ایجاد کنم تا هم دوستانی که این سیستم مدیریتی رو ندیدند ببینند و هم اینکه روی جزئیات و کد نویسی هاش گفتگو کنیم... فکر کنم مفید خواهد بود حداقل برای بنده مبتدی چنین است.
با بررسی کد ها می تونیم توانایی های خودمان را بالا ببریم. اگر کدی یا روشی رو متوجه نشدیم با گفتگو درک کرده و یاد بگیریم...
بعضی از نکات شاید ساده و پایه ای باشند ولی متاسفانه خودم تا به حال از ان استفاده نکرده بودم....

mohammadreza.najafipour
دوشنبه 07 مهر 1393, 07:26 صبح
اول از همه از دوست خوبم آقای رشوند تشکر می کنم به خاطره این تاپیک خوب :لبخندساده:
من هم در ابتدای راه یادگیری MVC هستم و از زمانی که با IRIS آشنا شدم خیلی از سوال هام برطرف شد. به نظرم برای الهام گرفتن میتونه منبع خیلی خوبی باشه.
امیدوارم دوستان این تاپیک رو جدی پیگیری کنن. خودم برام یه سوالی پیش اومده بود، اگه Global.asax رو نگاه کرده باشید دو خط زیر رو می بینید:

ViewEngines.Engines.Clear();
ViewEngines.Engines.Add(new RazorViewEngine());

با پیگیری و جستجوهایی که داشتم به یه لینک رسیدم که خیلی جالب این قضیه رو بررسی کرده:
http://encosia.com/a-harsh-reminder-about-the-importance-of-debug-false/
پیش فرض (اگه اشتباه نکنم) View Engine هایی که فعال هستش WebFormViewEngine و RazorViewEngine هستند. پس وقتی کاربر یه درخواست میفرسته برای مثال
http://www.mysite.com/Home/About
اگه View مورده نظر وجود نداشته باشه، خطایی رو خواهیم دید که نشون میده Viewهای زیر جستجو شده:


~/Views/Home/About.aspx
~/Views/Home/About.ascx
~/Views/Shared/About.aspx
~/Views/Shared/About.ascx
~/Views/Home/About.cshtml
~/Views/Home/About.vbhtml
~/Views/Shared/About.cshtml
~/Views/Shared/About.vbhtml

همونطوری که مشخص هستش دنبال View های مربوط به WebForm هم بوده. پس وقتی ما از View های Razor داریم استفاده می کنیم نیازی نیست که برنامه ی ما دنبال Viewهای WebForm بگرده. با دو خط ذکر شده در بالا، به برنامه میگیم که ما RazorViewEngine رو فقط نیاز داریم.
نتیجه خیلی جالبه. به صورت پیش فرض که دو تا Engine فعاله، در تست انجام شده، در هر ثانیه برنامه قادر به پاسخگویی به 1225 درخواست هستش، در صورتیکه در حالتیکه فقط از یک Engine استفاده شده برنامه در هر ثانیه 2671 در خواست رو تونسته پاسخ بده :تشویق:
پی نوشت: خوشحال میشم دوستان اطلاعات بیشتری در این مورد بدن :چشمک:

alef.divar
یک شنبه 13 مهر 1393, 09:47 صبح
با سلام
چند روزه کد های "سیستم مدیریت محتوای IRIS (http://www.dotnettips.info/projects/details/13)" رو نگاه می کنم واقعا برای ایده گرفتن و یادگیری بسیار مناسبه...
به نظرم رسید این تاپیک رو ایجاد کنم تا هم دوستانی که این سیستم مدیریتی رو ندیدند ببینند و هم اینکه روی جزئیات و کد نویسی هاش گفتگو کنیم... فکر کنم مفید خواهد بود حداقل برای بنده مبتدی چنین است.
با بررسی کد ها می تونیم توانایی های خودمان را بالا ببریم. اگر کدی یا روشی رو متوجه نشدیم با گفتگو درک کرده و یاد بگیریم...
بعضی از نکات شاید ساده و پایه ای باشند ولی متاسفانه خودم تا به حال از ان استفاده نکرده بودم....

سلام
لطف میکنی یه جایی آپلودش کنی که منم بتونم مطالعه ش کنم
اینجا (http://www.dotnettips.info/projects/details/13#) هستش ولی من پیدا نکردم لینک دانلودش رو.

mohammadreza.najafipour
یک شنبه 13 مهر 1393, 12:58 عصر
سلام
لطف میکنی یه جایی آپلودش کنی که منم بتونم مطالعه ش کنم
اینجا (http://www.dotnettips.info/projects/details/13#) هستش ولی من پیدا نکردم لینک دانلودش رو.
توی همون صفحه پایین پست نوشته شده: "فایل ها". اگه روش کلیک کنید صفحه ی زیر رو براتون میاره که میتونید از اونجا سورس رو دانلود کنید:
http://www.dotnettips.info/projects/files/13#/page/1/date/desc

HOSSEINONLINE7
دوشنبه 14 مهر 1393, 09:31 صبح
یک کلاس هش پسورد توی این پروژه اضافه شده که من خواستم از این استفاده کنم :

public class Encryption
{
public static string EncryptingPassword(string password)
{
return Crypto.HashPassword(Crypto.SHA256(password));
}

public static bool VerifyPassword(string password, string hashedPassword)
{
return Crypto.VerifyHashedPassword(hashedPassword, Crypto.SHA256(password));
}
}

مشکل اینجاست که متدهای Crypto.HashPassword را برای من نداره . از طریق ناگت تمام پکیج هایی که فکر میکردم بهش مربوط میشه را نصب کردم ولی فقط Crypto اضافه شده و متدهای داخلش مثل HashPassword و VerifyHashedPassword و SHA256 را برای من نداره ! باید پکیج خاصی براش نصب کنم ؟

mohammadreza.najafipour
دوشنبه 14 مهر 1393, 15:15 عصر
یک کلاس هش پسورد توی این پروژه اضافه شده که من خواستم از این استفاده کنم :

public class Encryption
{
public static string EncryptingPassword(string password)
{
return Crypto.HashPassword(Crypto.SHA256(password));
}

public static bool VerifyPassword(string password, string hashedPassword)
{
return Crypto.VerifyHashedPassword(hashedPassword, Crypto.SHA256(password));
}
}

مشکل اینجاست که متدهای Crypto.HashPassword را برای من نداره . از طریق ناگت تمام پکیج هایی که فکر میکردم بهش مربوط میشه را نصب کردم ولی فقط Crypto اضافه شده و متدهای داخلش مثل HashPassword و VerifyHashedPassword و SHA256 را برای من نداره ! باید پکیج خاصی براش نصب کنم ؟

خط زیر که توی فایل Encryption.cs هست نشون میده Crypto از Assemblyهای Asp.net هستش:

using System.Web.Helpers;


روی Crypto کلید F12 یا Go to Definition رو بزن، برای من همه ی تابع ها هستش.
فایل dll هم نسخه 2 هستش.

System.Web.Helpers.dll, v2.0.0.0

HOSSEINONLINE7
دوشنبه 14 مهر 1393, 17:54 عصر
خط زیر که توی فایل Encryption.cs هست نشون میده Crypto از Assemblyهای Asp.net هستش:

using System.Web.Helpers;


روی Crypto کلید F12 یا Go to Definition رو بزن، برای من همه ی تابع ها هستش.
فایل dll هم نسخه 2 هستش.

System.Web.Helpers.dll, v2.0.0.0


خود dll را برداشتم به رفرنس هام اضافه کردم - از طریق ناگت System.Web.Helpers را نصب کردم بازم درست نشد .

باید توی WebConfig تعریفش کرد ؟

emadfa
چهارشنبه 16 مهر 1393, 17:09 عصر
ممنون محمد رضای عزیز... اطلاعات ارزشمندی بود...

IR-Developer
جمعه 18 مهر 1393, 11:58 صبح
سلام دوستان من توی پیاده سازی Dependency Injection مشکل دارم و مقالات سایت DotNetTips (http://www.dotnettips.info/post/1006/%D8%AA%D8%B2%D8%B1%DB%8C%D9%82-%D9%88%D8%A7%D8%A8%D8%B3%D8%AA%DA%AF%DB%8C-dependency-injection-%D9%88-%D8%AA%D9%88%D8%B3%D8%B9%D9%87-%D9%BE%D8%B0%DB%8C%D8%B1%DB%8C) را خوندم ولی خوب شاید بخاطر مبتدی بودنم هنوز یکمی برام نا مفهوم هست .

1. سوال اولم اینه که این کد در DbContext کارش چیه ؟

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


2. مثلا توی سازنده ی کنترلر زیر پارامترهایی هست

public PostController(IUnitOfWork uow, IPostService postSerivce, IUserService userService) {
_uow = uow;
_postService = postSerivce;
_userService = userService;
}

خوب این ورودی ها از کجا به کنترلر پاس داده شده ؟

3. دلیل استفاده از DI Container مثل Ninject اصلا برای چیه ؟ ما که همونطوری وابستگی ها را برطرف کردیم !
توی مقاله ایی از سایت آقای نصیری گفته شده بود که باید هربار یادآوری کنیم کدام پیاده سازی از اینترفیس مورد نیاز است و برای همین Ninject این کار را میکنه ولی من منظورش را متوجه نشدم .

IR-Developer
دوشنبه 21 مهر 1393, 19:02 عصر
لطفا یکی از دوستان راهنمایی کنه:لبخندساده:

hp1361
دوشنبه 21 مهر 1393, 20:16 عصر
سلام

سوال اولت :


IDbSet<TEntity> Set<TEntity>() where TEntity : class;


در این کد ما داریم میگیم که اینترفیس ما (IUnitOfWork) دارای متدی بنام Set هستش که ورودی اون TEntity است. اینکه TEntity چی هست در انتهای کد مشخص کردیم که TEntity صرفاً باید class باشه! همین!


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

در ادامه وقتی که قصد پیاده سازی این اینترفیس رو داریم (IUnitOfWork) از اونجایی که کلاس DbContext نیز همین متد رو داره ما از کلمه new استفاده کردیم که بگیم یک متدی با این نام(Set) در کلاس والد(DbContext) وجود دارد و ما میخواهیم اون رو جور دیگری پیاده سازی کنیم(یعنی پیاده سازی والد پنهان بشه و از این یکی استفاده بشه). درون پیاده سازی متد دوباره ارجاع میدیم به پیاده سازی متدی که والد انجام داده(base.Set) اما با این تفاوت که اینبار داریم میگیم با این TEntity که از ورودی دریافت میشه
،هر کاری که در Set والد انجام میدادی بر روی این TEntity انجام بده!
خلاصه اینکه دستمان باز میشه در انتخاب Repository های موجود در DbContext .


قسمت دوم وسوم سوالت

فرض کن پنچ مدل پیاده سازی از اینترفیس IPostService رو انجام دادی و از پیاده سازی شماره یک در جاهای مختلف برنامه ات استفاده کردی . حالا فردا مشتری میاد میگه از پیاده سازی دوم استفاده کن! اونوق چیکار میکنی؟ کل کدت رو میگردی جاهایی که ازش استفاده کردی رو پیدا میکنی و پیاده سازی دوم رو استفاده میکنی؟

برای رفع این مشکل از DI ها استفاده میکنیم. کار DI اینه که هروقت نیاز به کلاس شد با توچه به تعریف شما در تنظیمات اون، اون پیاده سازی که شما تعریف کردید رو تزریق میکنه. یعنی هرجا شما یک IPostService تعریف کردید میاد نوع کلاس اونرو مثلا کلاس پیاده سازی شماره دو رو قرار میده.

امیدوارم که ساده توضیح داده باشم

موفق باشیم

بهزاد علی محمدزاده
سه شنبه 22 مهر 1393, 08:54 صبح
تا حدود یکسال پیش تب استفاده از UnitOfWork و Repository یکباره داغ شد. و علتش هم واقعا مشخص نبود که چطور مقالاتی در این زمینه منتشر شد! . اگر مطالب امروز و دنبال کنید, خیلی به ندرت می بینید که کسی از UnitOfWork استفاده کرده باشه. در این لینک (http://programmers.stackexchange.com/questions/180851/why-shouldnt-i-use-the-repository-pattern-with-entity-framework) , توی مصاحبه استخدامی از طرف سوال شده که چرا UnitOfWork برای ORM ها مناسب نیست ؟ و اینم اومده سوال و مطرح کرده . پاسخ Chris Pratt (http://programmers.stackexchange.com/users/65618/chris-pratt) به سوال و بخونید متوجه خواهید شد که نباید از این الگو استفاده کنید:



Entity Framework alreadyimplements a repository pattern. DbContext is your UoW (Unit of Work) and each DbSet is the repository. Implementing another layer on top of this is not only redundant, but makes maintenance harder.

و


People follow patterns without realizing the purpose of the pattern. In the case of the repository pattern, the purpose is to abstract away the low-level database querying logic. In the old days of actually writing SQL statements in your code, the repository pattern was a way to move that SQL out of individual methods scattered throughout your code base and localize it in one place.


اون Context که EF در اختیار شما قرار داده خودش UnitOfWork هست . چه دلیلی داره که شما یه لایه ی دیگه روی این ایجاد می کنید؟ خیلی از بچه هایی که MVC کار می کنن بنا بر مقاله آقای نصیری الان گیر و گرفتشون شده استفاده از این الگو ها.. شاید امروز خود ایشون اون مقاله رو اگر بخواد بازنویسی کنه طوری دیگه ایی اون بنویسه .انتظار میره اگر به نتایج جدید تری دست پیدا کرند اون مقالات و ویرایش کنن.

مساله بعدی اینکه در تعریف Repository اومده که کارهای اولیه CRUD رو انجام میده. و Services ها منطق رو پیاده سازی می کنند. یعنی شما اگر از ViewModel استفاده می کنید. اون و Pass میدین به Service مربوطه و اون هم منطق رو اعمال و برای ذخیره به Repository میسپاره. حالا این Repository خودش توسط EF پیاده سازی شده یا نه ؟ شده و لوزمی نداره که یه لایه ی دیگه روی این لایه ایجاد کنید! . همون Context رو که در اختیار دارید در لایه سرویس نمونه سازی و باهاش کار کنید. به همین راحتی ...

لطفا اینقدر گیر به الگوها که بعضی هاش اصلا برای پروژه های Entreprise هست ندین . در مورد استفاده از Ninject , Structuremap و ... هم به اینصورت هست. اگر با مباحث تست آشنا نیستید, اگر هنگام استفاده نمی دونید دارید چه کاری انجام میدین, بهتره تا زمان یادگیری عمیق تر استفاده از کتابخانه ها رو برای تزریق وابستگی کنار بگذارید. در همون لایه سرویس از DbContext نمونه سازی و در نهایت با پیاده سازی IDisposable شی و از بین ببرید.
وقتی یه وب سایت چهار صفحه ایی داری و اطلاعاتت مثل من کفایت نمیده , استفاده از اینها رو به تعویق بنداز تا زمانی که اونها رو درک کنی.

hp1361
سه شنبه 22 مهر 1393, 11:52 صبح
سلام

در این لینک
http://www.dotnettips.info/post/1773/repository-%D9%87%D8%A7-%D8%B1%D9%88%DB%8C-unitofwork-%D8%A7%DB%8C%D8%AF%D9%87-%D8%AE%D9%88%D8%A8%DB%8C-%D9%86%DB%8C%D8%B3%D8%AA%D9%86%D8%AF

و این لینک
http://www.dotnettips.info/post/841/ef-code-first-11

به این موضوع اشاره شده که منظور از IUnitOfWork پیاده سازی مجدد UnitOfWork نیست!

البته من در مقام دفاع بر نیامده ام ها! و با نظر شما که گفتید با انجام این کارها پیچیدگی خیلی زیاد شده موافقم و باز هم موافقم که گفتید " وقتی یه وب سایت چهار صفحه ایی داری و اطلاعاتت مثل من کفایت نمیده , استفاده از اینها رو به تعویق بنداز تا زمانی که اونها رو درک کنی." و معتقدم دلیل اصلی اینکه اینقدر سردرگم میشیم اینه که خوب مطالب رو درک نکردیم.
اما ای کاش یکی بود لااقل مطالب رو به زبان ساده تر توضیح میداد(مثل چیزی که خودم بالا توضیح دادم)

موفق باشیم

IR-Developer
سه شنبه 22 مهر 1393, 15:22 عصر
واقعیتش دوستان چون من Performance برام خیلی مهمه و میخوام همیشه بروز باشم از شیوه های نوین دوست دارم استفاده کنم .

ببینید در حال حاظر من از این روش استفاده میکنم که یک کلاس به نام Repository میسازم و از Context در سازنده ی کلاس نمونه سازی میکنم و متدهای add-delete-update و هر چیز دیگه که احتیاج داشتم را بهش اضافه میکنم و در آخر در متد مخرب کلاس Dispose میکنم. این کلاس را به ازای هر کدام از جداول ها که نیاز دارم میسازم .

این شیوه صحیحه ؟ اگر نه بهترین الگویی که میشه ازش استفاده کرد چیه ؟

hp1361
سه شنبه 22 مهر 1393, 16:04 عصر
سلام

کدی که نوشتی رو بزار تا بهتر بشه توضیح داد

IR-Developer
سه شنبه 22 مهر 1393, 16:47 عصر
سلام

کدی که نوشتی رو بزار تا بهتر بشه توضیح داد


namespace MvcProj.Models.Repositories{
public class CatRepository : IDisposable
{
private DataLayers.Context.DbContext db = null;


public CatRepository()
{
db = new DataLayers.Context.DbContext();
}


public bool Add(Categories entity, bool autoSave = true)
{
try
{
db.Category.Add(entity);
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch
{
return false;
}
}


public bool Update(Categories entity, bool autoSave = true)
{
try
{


db.Category.Attach(entity);
db.Entry(entity).State = System.Data.Entity.EntityState.Modified;
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch
{
return false;
}
}


public bool Delete(Categories entity, bool autoSave = true)
{
try
{
db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
if (autoSave)
return Convert.ToBoolean(db.SaveChanges());
else
return false;
}
catch
{
return false;
}
}


public bool Delete(int id, bool autoSave = true)
{
try
{
var entity = db.Category.Find(id);
db.Entry(entity).State = System.Data.Entity.EntityState.Deleted;
if (autoSave)
{
bool result = Convert.ToBoolean(db.SaveChanges());

return result;
}
else
return false;
}
catch
{
return false;
}
}


public Categories Find(int id)
{
try
{
return db.Category.Find(id);
}
catch
{
return null;
}
}


public IQueryable<Categories> Where(System.Linq.Expressions.Expression<Func<Categories, bool>> predicate)
{
try
{
return db.Category.Where(predicate);
}
catch
{
return null;
}
}


public IQueryable<Categories> Select()
{
try
{
return db.Category.AsQueryable();
}
catch
{
return null;
}
}


public IQueryable<TResult> Select<TResult>(System.Linq.Expressions.Expression<Func<Categories, TResult>> selector)
{
try
{
return db.Category.Select(selector);
}
catch
{
return null;
}
}


public int GetLastIdentity()
{
try
{
if (db.Category.Any())
return db.Category.OrderByDescending(p => p.Id).First().Id;
else
return 0;
}
catch
{
return -1;
}
}


public int Save()
{
try
{
return db.SaveChanges();
}
catch
{
return -1;
}
}


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


protected virtual void Dispose(bool disposing)
{
if (disposing)
{
if (this.db != null)
{
this.db.Dispose();
this.db = null;
}
}
}


~CatRepository()
{
Dispose(false);
}
}
}

hp1361
چهارشنبه 23 مهر 1393, 06:20 صبح
سلام

برای اینکه از موضوع تاپیک دور نشیم در این راستا جواب میدم

شما از DbContext برای ذخیره و بازیابی در دیتابیس استفاده کرده اید. فرض کنید فردا روزی میاد و لازم میشه شما از ORM دیگه ای استفاده کنید. اونوقت چیکار میکنید؟ تمام کد بالا رو که نوشتید میگردید و هرجا از DbContext استفاده کردید بجاش از Context جدید استفاده میکنید؟(البته میدونم که میشه با یه کلک رشتی اسم Context جدید رو هم DbContext بزارید اما اصولی نیست نه!)
راه حل چیه؟
راه حل inversion of control (IoC) هستش. یعنی کاری کنیم که کلاس ما درون خودش وابستگی نداشته باشه! چطور این کار رو بکنیم؟
راه حل DI (Dependency Injection)هستش(یعنی وابستگی رو بهش تزریق کنیم). چند مدل DI داریم که یکیش A constructor injection هستش. یعنی در زمان ساخت اون کلاس، اون وابستگی(آنچه که نیاز دارد از آن درون خودش استفاده کند) را بهش تزریق کنیم(خارجی ها هم با این اسم گذاریشون!آدم همش یاد آمپول می افته!)

سوال: آقا ما در سطح برنامه مون کلی DI داریم. این یکی یکی DI کردن که خسته کننده است!راه ساده ای نداره؟
جواب: راه حل استفاده از ابزارهایی جهت انجام این Injection ها بصورت خودکاره. برای نمونه Structuremap, Ninject و.....

در پروژه IRIS این اعمال انجام شده

IR-Developer
چهارشنبه 23 مهر 1393, 21:25 عصر
ممنون از توضیح شما متوجه شدم . فقط یک ابهامی که هنوز دارم اینه که بالاخره از الگوی Unit Of Work استفاده کنیم یا خیر ؟

آیا خود MVC این الگو را خودش به کار میگیره و نیازی نیست ما انجامش بدیم ؟ و فقط از همون DI استفاده کنیم کفایت میکنه ؟

hp1361
چهارشنبه 23 مهر 1393, 21:39 عصر
سلام

اولا DI استفاده کردن ربطی به UnitOfWork استفاده کردن یا نکردن نداره!

ما از DI استفاده میکنیم که محدودیت های برنامه مون در زمینه کدنویسی کاهش بدیم. اما استفاده از UOW امری ضروری باعث افزایش کاراییمون در ارتباط با عملیات مرتبط با دیتابیس است.

صد البته که بهتره از UOW در برنامه ها استفاده کرد. فقط نکته ای که باید در نظر گرفت اینه که Entity Framework که ما میاییم از DbContext اش استفاده میکنیم خودش رویه ی UOW رو پیاده سازی کرده، لذا نباید مجددا روی اون این کارها رو انجام بدیم!

در مثال IRIS چون از EF استفاده شده لذا صرفا یک Interface بنام IUnitOfWork تعریف کرده که در اون دو چیز قرار داده. یکی Set و دیگری SaveChange که اولی رو فقط برای تغییر DbSet جاری ازش استفاده میشه و دومی هم توسط DbContext پیاده سازی شده و اینجا فقط بهش دسترسی پیدا میکنیم و احتیاجی به پیاده سازی نداره.

برای استفاده از UnitOfWork هم در قسمت های مختلف برنامه از DI استفاده کرده که موارد مربوط به معکوس سازی وابستگی رعایت شده باشه

اینکه پرسیدید آیا MVC این الگو رو بکار میگیره، فکر کنم هنوز مفهوم کارهایی که انجام میدیم(بقول ارسطو عامل فهوای کلام) رو نگرفتی. دوباره مطالب رو بخون متوجه میشی
البته حق داری که سردرگم بشی چون مطالب زیادیه که داری باهم یاد میگیری.تلاش چاره کاره

موفق باشیم

IR-Developer
جمعه 25 مهر 1393, 00:40 صبح
کلی از مطالب آموزشی DI را در سایت آقای نصیری هر روز میخونم ولی نتونستم پیاده سازییش کنم و مطالب کمی گنگ بود وکلی ابهام در اون داشتم

با دیدن این ویدئو DI را یادگرفتم و بالاخره خودم تونستم پیاده سازیش کنم ...
http://www.youtube.com/watch?v=w_MehI2qBTo


قسمت پیاده سازی Uow که از _uow.SaveChange(); استفاده میکنم خطای
Object reference not set to an instance of an object.
میده !

این متد مگه از طرف خود Dbcontext اصلی مقدار نمیگیره ؟ این خطا برای چیه ؟

IR-Developer
جمعه 25 مهر 1393, 11:26 صبح
یک اشتباهی کرده بودم که حل شد .

الان پروژه اجرا میشه و هیچ خطایی نمیده و دیتابیس ساخته میشه ولی هیچ چیزی توی جدولم نوشته نمیشه !!!

SaveChange هم میکنم ولی اطلاعاتم در دیتابیس ثبت نمیشه مشکل از چیه ؟

توی کنترلر Home اکشن Index اینا نوشتم :

_post.AddPost(new Post { Body = "aa", Title = "pp" });



_uow.SaveChanges();

HOSSEINONLINE7
جمعه 25 مهر 1393, 13:06 عصر
سلام من این مشکل را دارم که وقتی از الگوی Unit Of work استفاده میکنم میتونم اطلاعات از جداول بخونم ولی نمیتونم ذخیره کنم !

پروژه که اجرا میکنم فقط جدول خالی ساخته میشه و چیزی توش نیست ! ولی میتونم اطلاعات موجود را از دیتابیس بخونم .

فکر کنم مشکل از دستور SaveChanges هست که در اینترفیس IUnit Of Work تعریف کردیم درست کار نمیکنه .

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

HOSSEINONLINE7
جمعه 25 مهر 1393, 13:30 عصر
دوستان یافتم :لبخند:

چه نکته ایی داشت . باید در Ninject WebCommon اینترفیس Unit Of Work به شکل زیر تعریف بشه :

kernel.Bind<IUnitOfWork>().To<DbContext>().InRequestScope();

باید InRequestScope هم حتما آخرش باشه وگرنه در دیتابیس اطلاعات ثبت نمیشه .