PDA

View Full Version : مشکل در درج مقدار با LinQ



sina.md
سه شنبه 12 مرداد 1389, 17:00 عصر
سلام دوستان.
یه مشکل دارم اونم اینه که یه table دارم که برای فیلد key خاصیت is Identity رو برابر Yes گذاشتم.
وقتی می خوام درج کنم با error زیر رو برو میشم.

Cannot insert explicit value for identity column in table 'link' when IDENTITY_INSERT is set to OFF.

حالا وقتی اون فیلد رو از حالت Identity در می آرم و به صورت دستی مقدار می دم مشکلی نیست.

خواهشن بگید برای اون فیلد باید کار خاصی انجام داد؟

karim_medusa
سه شنبه 12 مرداد 1389, 17:09 عصر
طبق خطایی که گذاشتی روشنه که مقدار دادی بهش.
explicit value for identity column

در اون ابجکتی که داری فیلدهایی که identity هستند رو نباید مقدار بدی.

البته یک موضوع دیگه هم هست از چه روشی برای درج استفاده کردی ؟ کد بزار.

sina.md
سه شنبه 12 مرداد 1389, 17:13 عصر
نه عزیزم مقدار ندادم.



tblLink.title = "Any thing";
tblLink.url = "Any thing";

db.links.InsertOnSubmit(tblLink);
db.SubmitChanges();

sina.md
سه شنبه 12 مرداد 1389, 17:18 عصر
راستی اگه یه کتاب زبان اصلی عالی که خودتون تاییدش می کنی می شناسی بهم بگید که دانلود کنمش.

karim_medusa
سه شنبه 12 مرداد 1389, 17:22 عصر
tblLink کجا new کردی?
بالای همین خطوطی که دادی؟

sina.md
سه شنبه 12 مرداد 1389, 17:22 عصر
mySiteDataContext db = new mySiteDataContext();
link tblLink = new link();
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
tblLink.title = "Any thing";
tblLink.url = "Any thing";

db.links.InsertOnSubmit(tblLink);
db.SubmitChanges();
}

karim_medusa
سه شنبه 12 مرداد 1389, 17:33 عصر
یه خورده بیشتر کد بزاری شاید بهتر بشه کمک کرد.

کلاسی که توسط لینک ایجاد شده رو بزار.

sina.md
سه شنبه 12 مرداد 1389, 17:40 عصر
مهندس شما یه کار کن.
همین مشکل منو یه تست بگیر ببین چی مشه.
(البته اگه وقت داری)
یه فیلد pk که identity=yes هستش باید بدون مقدار افزایش پیدا کنه اما اینجا نمی دونم چرا مشکل می گیره.

برنامم همین 4تا خط هستش خدایش:قهقهه:

آخه دارم linq یاد می گیرم.
به حر حال ممنونت می شم.

karim_medusa
سه شنبه 12 مرداد 1389, 18:11 عصر
فیلدی که identity است باید به صورت زیر توسط لینک ایجاد شده باشه . چک کن ببین کد شما این جوریه .



[Column(Storage="_Id", AutoSync=AutoSync.OnInsert, DbType="Int NOT NULL IDENTITY", IsPrimaryKey=true, IsDbGenerated=true)]
public int Id

sina.md
سه شنبه 12 مرداد 1389, 18:35 عصر
برای من این بود


[Column(Storage="_id", DbType="Int NOT NULL", IsPrimaryKey=true)]


برای شما رو جاش گذاشتم اما تغییری نکرد.

کلاس رو برات آپ کردم.

مهدی فرزاد
سه شنبه 12 مرداد 1389, 18:37 عصر
link tblLink = new link();
رو بگذار داخل Button1_Click ببین درست میشه؟

مهدی فرزاد
سه شنبه 12 مرداد 1389, 18:53 عصر
[global::System.Data.Linq.Mapping.ColumnAttribute(S torage = "_Id", AutoSync = AutoSync.OnInsert, DbType = "Int NOT NULL IDENTITY", IsPrimaryKey = true, IsDbGenerated = true)]

sina.md
سه شنبه 12 مرداد 1389, 19:14 عصر
باز هم جواب نمیده.
مهندس اگه یه sample بنویسی ممنونت میشم.

مهدی فرزاد
سه شنبه 12 مرداد 1389, 19:36 عصر
این برنامه رو ببین

sina.md
سه شنبه 12 مرداد 1389, 19:42 عصر
با 2010 نوشتی؟

همین دیروز 2010 رو پاک کردم 2008 ریختم:ناراحت:

یجوری چکش می کنم. اگه جواب نگرفتم بهتون اطلاع می دم.

مهدی فرزاد
سه شنبه 12 مرداد 1389, 19:48 عصر
یه پروژه با 2008 باز کن و فایلهای منو Insert کن

sina.md
سه شنبه 12 مرداد 1389, 19:50 عصر
خدا نکنه مغز هنگ کنه.:قهقهه: اونوقت کارای به این راحتی می شه الگوریتم فروشنده دورگرد:قهقهه:
یه کلاس دیگه درست کردم مشکل حل شد .دوستان ممنون که کمک کردین.

مهدی فرزاد
سه شنبه 12 مرداد 1389, 19:53 عصر
خدا رو شکر

karim_medusa
چهارشنبه 13 مرداد 1389, 06:53 صبح
اقا جان این کدی که گذاشتی میگه که فیلد شما identity نیست .


DbType="Int NOT NULL"


هر تغییری که در بانک اطلاعاتی انجام می دی باید دوباره در dbml Designer اونو اصلاح کنی. ساده ترین راهش جدول رو حذف کنی و دوباره دراگ کنی.