باسلام.یک برنامه طراحی کردم که شامل چند جدول هست که باهم مرتبط شدند.اما در زمان add کردن در جدول tblDeliver خطا میده و نمیشه به این جدول رکوردی اضافه کرد.
tblUser
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tools_Store
{
class tblUser
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[StringLength(6)]
public string PersonId { get; set; }
[MaxLength(50)]
[Required]
public string PersonName { get; set; }
[MaxLength(50)]
public string WorkGroup { get; set; }
[MaxLength(6)]
[Required]
public string TypeUser { get; set; }
[MaxLength(50)]
[Required]
public string UserName { get; set; }
[MaxLength(50)]
[Required]
public string Password { get; set; }
[StringLength(11)]
public string PhoneNumber { get; set; }
[MaxLength(255)]
public string personNote { get; set; }
public virtual ICollection<tblDeliver> TblDeliver { get; set; }
}
}
tblTools
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tools_Store.Model.DB
{
class tblTools
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.None)]
[MaxLength(10)]
public string ToolsCode { get; set; }
[MaxLength(100)]
[Required]
public string ToolsName { get; set; }
[Required]
public int Qty { get; set; }
[Required]
[MaxLength(15)]
public string Unit { get; set; }
[MaxLength(20)]
public string LocTools { get; set; }
[Required]
public int IDAnbar { get; set; }
public int Mojudi { get; set; }
public virtual ICollection<tblNewTools> TblNewTools { get; set; }
public virtual ICollection<tblDeliver> TblDeliver { get; set; }
public virtual ICollection<tblAnbarTools> TblAnbarTools { get; set; }
}
}
tblNewTools
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tools_Store.Model.DB
{
class tblNewTools
{
[Key]
public int Id { get; set; }
[MaxLength(10)]
[Required]
public string ToolsCode { get; set; }
[MaxLength(100)]
[Required]
public string ToolsName { get; set; }
[Required]
public int Qty { get; set; }
[Required]
[MaxLength(15)]
public string Unit { get; set; }
[MaxLength(20)]
public string LocTools { get; set; }
[MaxLength(10)]
public string Anbar { get; set; }
[MaxLength(10)]
public string DateReg { get; set; }
[StringLength(6)]
public string IdPersonReg { get; set; }
[MaxLength(255)]
public string Note { get; set; }
public virtual tblTools TblTools { get; set; }
public virtual tblAnbarTools TblAnbarTools { get; set; }
}
}
tblMoveTools
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tools_Store.Model.DB
{
class tblMoveTools
{
[Key]
public int id { get; set; }
[Required]
public int IdAnbarOut { get; set; }
[MaxLength(10)]
[Required]
public string CodeToolsOut { get; set; }
[Required]
public int IdAnbarIn { get; set; }
[MaxLength(10)]
[Required]
public string CodeToolsIn { get; set; }
[MaxLength(100)]
[Required]
public String NameTools { get; set; }
[Required]
public int Qty { get; set; }
[MaxLength(10)]
public string DateReg { get; set; }
[StringLength(6)]
public string IdPersonReg { get; set; }
[MaxLength(255)]
public string Note { get; set; }
public virtual tblAnbarTools TblAnbarTools { get; set; }
}
}
tblDeliver
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tools_Store.Model.DB;
namespace Tools_Store
{
class tblDeliver
{
[Key]
public int DeliverID { get; set; }
[MaxLength(10)]
public string ToolsCode { get; set; }
[MaxLength(100)]
[Required]
public string ToolsName { get; set; }
[Required]
public int Qty { get; set; }
[Required]
[MaxLength(15)]
public string Unit { get; set; }
[MaxLength(20)]
public string LocTools { get; set; }
[Required]
public int IDAnbar { get; set; }
[MaxLength(10)]
public string DateDeliver { get; set; }
[StringLength(6)]
public string IdPersonDeliver { get; set; }
[StringLength(6)]
public string IdPersonReg { get; set; }
[MaxLength(10)]
public string DateReceive { get; set; }
[StringLength(6)]
public string IdPersonReceive { get; set; }
[MaxLength(255)]
public string Note { get; set; }
public bool Select { get; set; }
public virtual tblTools TblTools { get; set; }
public virtual tblUser TblUser { get; set; }
public virtual tblMissingTools TblMissingTools { get; set; }
public virtual tblAnbarTools TblAnbarTools { get; set; }
}
}
tblAnbarTools
using System;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Tools_Store.Model.DB
{
class tblAnbarTools
{
[Key]
public int IdAnbar { get; set; }
[MaxLength(10)]
public string NameAnbar { get; set; }
public virtual ICollection<tblNewTools> TblNewTools { get; set; }
public virtual ICollection<tblDeliver> TblDeliver { get; set; }
public virtual ICollection<tblTools> TblTools { get; set; }
public virtual ICollection<tblMoveTools> TblMoveTools { get; set; }
}
}
و مدل DbContext
ModelContext
using System;
using System.Collections.Generic;
using System.Data.Entity;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Tools_Store.Model.DB;
namespace Tools_Store.Model.Context
{
class ModelContext : DbContext
{
public ModelContext() : base("name=mycon") { }
public DbSet<tblUser> user { get; set; }
public DbSet<tblTools> tools { get; set; }
public DbSet<tblMissingTools> missingTools { get; set; }
public DbSet<tblNewTools> newTools { get; set; }
public DbSet<tblMoveTools> moveTools { get; set; }
public DbSet<tblAnbarTools> anbarTools { get; set; }
public DbSet<tblDeliver> deliver { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<tblTools>()
.HasMany(a => a.TblNewTools)
.WithRequired(s => s.TblTools)
.HasForeignKey(g => g.ToolsCode);
modelBuilder.Entity<tblDeliver>()
.HasKey(p => p.DeliverID)
.HasOptional(e => e.TblMissingTools)
.WithRequired(e => e.TblDeliver);
modelBuilder.Entity<tblTools>()
.HasMany(a => a.TblDeliver)
.WithRequired(s => s.TblTools)
.HasForeignKey(g => g.ToolsCode);
}
}
}
و رشته اتصال (connectionStrings)
<connectionStrings>
<add name="mycon" connectionString="Data Source=.\SQLEXPRESS;Initial Catalog=DB_Tools_Store;User ID=sa;Password=1;integrated security=True;MultipleActiveResultSets=True;App=EntityFramework"
providerName="System.Data.SqlClient" />
</connectionStrings>
و حالا قطعه کدی که به رکورد به جدول tblDeliver میافزاید که در زمان SaveChanges خطا میده.
tblDeliver DeliverTools = new tblDeliver()
{
IdPersonDeliver = cmbIdPerson.Text,
ToolsCode = cmbCodeTools.Text,
ToolsName = cmbNameTools.Text,
Qty = int.Parse(txtQty.Text),
Unit = cmbUnit.Text,
LocTools = qt.LocTools,
IDAnbar = Varibel.NumAnbar,
DateDeliver = DatePickerDeliver.Text,
Select = false,
IdPersonReg=Varibel.id
};
db.deliver.Add(DeliverTools);
db.SaveChanges();
ممنون میشم راهنمایی بفرمایید که آیا ایراد در ارتباط بین جداوله یا جایی دیگر.
کاش توضیحات بیشتری در مورد انتیتی ها می دادید و اینکه وقتی سوال طرح میشه بهتره که خلاصه ای از کدها نوشته بشه. یعنی اینکه همه کدهای پروژه رو کپی و پیست کنیم کار برای بررسی سخت میشه.
اما در مجموع خطایی که شما قرار دادید گفته در جدول TblAnbarTools خطا رخ داده. در این جدول شما 2 تا فیلد تعریف کردید. بقیه پراپرتی ها برای چی تعریف شدن ؟
class tblAnbarTools
{
[Key]
public int IdAnbar { get; set; }
[MaxLength(10)]
public string NameAnbar { get; set; }
//این پراپرتی ها برای چه منظوری تعریف شدن ؟
public virtual ICollection<tblNewTools> TblNewTools { get; set; }
public virtual ICollection<tblDeliver> TblDeliver { get; set; }
public virtual ICollection<tblTools> TblTools { get; set; }
public virtual ICollection<tblMoveTools> TblMoveTools { get; set; }
}
اگر شما می خواید روابط بین جداولتون رو برقرار کنید بهتره به صورت واضح تر این کار رو کنید و از تفسیر دیتابیس پرهیز کنید. در کدهای بالا منظور این بوده که مثلا جدول tblAnbarTools رابطه یک به چند با جداول دیگه داره. خب همین رو میشد به صورت راحتتری با تعریف کلید خارجی مشخص کرد.
class tblMoveTools
{
...
public int id {get; set;}
[ForeignKey("id")]
public virtual tblAnbarTools tblAnbarTools { get; set; }
}
در قطعه کد بالا خیلی واضح مشخص کردیم که فیلد id یک کلید خارجی در جدول tblMoveTools هست. این حالت خیلی ساده تر هست تا اینکه بیایم بگیم هر رکورد از جدول tblAnbarTools یک رابطه یک به چند با سایر جداول داره.
امیدوارم منظورم رو خوب رسونده باشم.
سلام.
من خودم هم فکر میکنم از همین ارتباط بین جداول باشه چون در جدول tblUser عملیات CRUD بدرستی انجام میشه و در جداول دیگه فقط عمل Read انجام میشه و به عمل Insert گیر میده.
این مطلبی که شما عنوان کردید واسه معرفی رابطه یک به چند جدول tblAnbarTools با جداول ذکر شده هست.
//این پراپرتی ها برای چه منظوری تعریف شدن ؟
public virtual ICollection<tblNewTools> TblNewTools { get; set; }
public virtual ICollection<tblDeliver> TblDeliver { get; set; }
public virtual ICollection<tblTools> TblTools { get; set; }
public virtual ICollection<tblMoveTools> TblMoveTools { get; set; }
الان شما کد رابطه رو در جدول tblMoveTools گفتید.
این کد رابطه در جدول tblAnbarTools چی میشه.
و آیا دیگه لازم نیست این رو درقسمت OnModelCreating(DbModelBuilder modelBuilder) کلاس Context بیاریم.
ممنون میشم بیشتر توضیح بدید.
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2013
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|
تاریخ :
1403/07/13
- ساعت :
12:06:00 PM
- بازدید :
350
- پاسخ :
1
|
تاریخ :
1403/06/24
- ساعت :
08:52:00 PM
- بازدید :
319
- پاسخ :
1
|
تاریخ :
1398/09/14
- ساعت :
01:58:00 PM
- بازدید :
4270
- پاسخ :
1
|
تاریخ :
1403/05/16
- ساعت :
05:43:00 AM
- بازدید :
662
- پاسخ :
0
|
تاریخ :
1398/09/05
- ساعت :
06:04:00 PM
- بازدید :
3174
- پاسخ :
2
|
تاریخ :
1398/09/08
- ساعت :
11:38:00 PM
- بازدید :
3251
- پاسخ :
1
|
تاریخ :
1403/04/12
- ساعت :
07:27:00 PM
- بازدید :
658
- پاسخ :
0
|
تاریخ :
1401/02/24
- ساعت :
02:17:00 PM
- بازدید :
2013
- پاسخ :
1
|
تاریخ :
1403/08/29
- ساعت :
07:15:00 PM
- بازدید :
79
- پاسخ :
0
|
تاریخ :
1403/08/18
- ساعت :
10:40:00 AM
- بازدید :
111
- پاسخ :
0
|
تاریخ :
1402/07/23
- ساعت :
04:01:00 PM
- بازدید :
1034
- پاسخ :
1
|
تاریخ :
1403/05/30
- ساعت :
09:22:00 AM
- بازدید :
430
- پاسخ :
1
|
تاریخ :
1402/08/01
- ساعت :
06:25:00 PM
- بازدید :
931
- پاسخ :
1
|
تاریخ :
1402/08/16
- ساعت :
10:38:00 AM
- بازدید :
1356
- پاسخ :
1
|
تاریخ :
1398/08/17
- ساعت :
01:27:00 AM
- بازدید :
4800
- پاسخ :
1
|
تاریخ :
1402/09/08
- ساعت :
07:34:00 PM
- بازدید :
1161
- پاسخ :
1
|
تاریخ :
1402/09/21
- ساعت :
11:10:00 PM
- بازدید :
599
- پاسخ :
1
|