PDA

View Full Version : سوال: استفاده از Code First



vahid1234
یک شنبه 18 اسفند 1392, 19:09 عصر
با سلام
من در مدل یک کلاس از دیتابیسی که قبلا داشتم ایجاد کردم و اما موقع اجرا همچین پیغامی میده
Exception Details: System.Data.SqlClient.SqlException: Invalid object name 'dbo.carkinds'.
که در اصل اسم جدول carkind که خودش "s" رو اضافه میکنه .
موفعی هم که Migrate و Database.SetInitializer رو اضافه میکنم یه جدول دیگه تو دیتابیس با همون 's' ایجاد میکنه
ممنون میشم از اساتید اگه بتونن راهنمایی کنن

Dr.Bronx
یک شنبه 18 اسفند 1392, 19:59 عصر
چند تا چیز رو چک کنید :



ConnectionString رو چک کنید که درست باشه .
دستور update-database رو در Console اجرا کنید .
دیتابیس رو پاک کنید و بزارید که EF خودش دوباره اون رو بسازه .
ممکنه که سرور Case-Sensitive باشه .
جدول _MigrationHistory رو حذف کنید و دستور update-database رو در Console اجرا کنید .


در صورتی که رفع نشد .
کد های مدل رو اینجا قرار بدید .

موفق باشید ./

vahid1234
دوشنبه 19 اسفند 1392, 08:55 صبح
ممنون Dr.Bronx (http://barnamenevis.org/member.php?48204-Dr-Bronx)
همه اونارو چک کردم ولی جل نشد.جالب اینه با یه دیتا بیس دیگه تو همین پروژه کار میکنم هیچ مشکلی نداره .ولی این یه جدول دیگه با 's' میسازه یه مشکل دیگه نمیتونم این دیتابیس رو حذف کنم چون اطلاعات چهار سال تو این دیتابیسه.

public class carkind
{
[Key]
public Int64 id { get; set; }
public string kind { get; set; }
[StringLength(50, ErrorMessage = "{0} نمي تواند بيش از {1} کاراکتر باشد")]
public string strkind { get; set; }
public Int16 carshow { get; set; }
public Int16 carintshow { get; set; }
public Int64 carmab { get; set; }
}



public class carkindcontext : DbContext
{

public DbSet<carkind> carkind { set; get; }
}

بهزاد علی محمدزاده
دوشنبه 19 اسفند 1392, 11:23 صبح
سلام . با استفاده از Data Annotations به EF بگو که اسم رو تغییر نده . و s بهش اضافه نکن .


[Table("carkind")]public class carkind
{
[Key]
public Int64 id { get; set; }
public string kind { get; set; }
[StringLength(50, ErrorMessage = "{0} نمي تواند بيش از {1} کاراکتر باشد")]
public string strkind { get; set; }
public Int16 carshow { get; set; }
public Int16 carintshow { get; set; }
public Int64 carmab { get; set; }
}

Dr.Bronx
دوشنبه 19 اسفند 1392, 13:45 عصر
هم این روش کار می کنه هم این :

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();

که باید به Context خودتون اضافه کنید .

یا کلا EF رو مجبور کنید این کار رو بکنه :

publicclassEFDbContext:DbContext{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<carkind>().ToTable("carkind");
} }

حالا دیگه EF دنبال carkinds نمی گرده .

موفق باشید ./