PDA

View Full Version : چگونه در join کردن تمام رکودهای فرزند را حذف کرد



bitcob589
جمعه 02 اسفند 1392, 17:22 عصر
با سلام
چگونه در join کردن تمام رکودهای فرزند که در جدولهای دیگر وجود دارد حذف کرد( رکود پدر و فرزندان حذف شود)


studentschoolDataClassesDataContext ee=new studentschoolDataClassesDataContext();
var madrs = (from dansh in ee.ones join prod in ee.twos on dansh.nameid equals prod.schoolid where dansh.id==iduser && dansh.codestudent==prod.codestudent select new { dansh.namelast, dansh.codestudent, prod.schoolname, prod.taid }).ToList();

Mahmoud.Afrad
جمعه 02 اسفند 1392, 17:50 عصر
چگونه در join کردن تمام رکودهای فرزند که در جدولهای دیگر وجود دارد حذف کرد( رکود پدر و فرزندان حذف شود)
اگر یه نفر این توضیح رو به شما میداد ازش چی میفهمیدید؟ حداقل فارسیش رو خوب توضیح بدید.

bitcob589
جمعه 02 اسفند 1392, 18:25 عصر
fگذارید واضح تر توضیح دهم
یک جدول اصلی دارم که در آن نام تمام کاربران وجود دارد و جدولهای دیگر وجود دارد که نام مدرسه کاربر وجود دارد و در جدول دیگر مشخصات دیگر کاربر وجود دارد حالا می خواهم
هر یک از کاربران در جدول اصلی انتخاب شد رکودهای کاربر در دیگر جدولها حذف شود

Mahmoud.Afrad
جمعه 02 اسفند 1392, 18:48 عصر
ارتباط برحسب کلید اصلی تعیین میشه. با انتخاب هر شخص حتما میتونی کلید اصلی هر شخص رو بدست بیاری. کافیه از جدول دیگه اونهایی رو حذف کنی که کد شخص در مرحله قبل انتخاب شده.

راه دیگه هم اینه که ارتباط رو برای Delete روی Cascade قرار بدی.

بهتره اسکریپت جداول رو بزاری و بگی که کاربر چجوری قراره انتخاب و حذف کنه.

Mahmoud-En
شنبه 03 اسفند 1392, 12:39 عصر
با سلام
در تکمیل صحبت مدیر محترم بخش، در پاسخ به سوال دوست عزیز استفاده از قوانین جامعیت ارجاعی میتواند به شما کمک کند. که سه قانون هنگام ارتباط بین جداول می توان تعریف نمود که یکی از آنها به نام cascade delete related records میباشد که شما با اعمال آن می توانید تمام رکوردهایی که فیلدهای آنها در ارتباط بین جداول نشانه گذاری شده را مدیریت کنید.

bitcob589
دوشنبه 05 اسفند 1392, 09:33 صبح
با سلام
که یکی از آنها به نام cascade delete related records میباشد که شما با اعمال آن می توانید تمام رکوردهایی که فیلدهای آنها در ارتباط بین جداول نشانه گذاری شده را مدیریت کنید.

اگر امکان دارد درباره نحوه پیاده سازی cascade delete related records توضیح دهید

bitcob589
پنج شنبه 08 اسفند 1392, 13:47 عصر
ارتباط برحسب کلید اصلی تعیین میشه. با انتخاب هر شخص حتما میتونی کلید اصلی هر شخص رو بدست بیاری. کافیه از جدول دیگه اونهایی رو حذف کنی که کد شخص در مرحله قبل انتخاب شده.

راه دیگه هم اینه که ارتباط رو برای Delete روی Cascade قرار بدی.

بهتره اسکریپت جداول رو بزاری و بگی که کاربر چجوری قراره انتخاب و حذف کنه.

در جدولstudentcodeشماره دانش آموز در فیلد activestudent ذخیره می شود نام هر کدام از شماره دانش آموزان در کموباکس انتخاب شد رکودهای که مربوط به این دانش آموز در جدولهای دیگر حذف شود و در جدول proptiesstudent آدرسهای دانش آموزان در آن ذخیره می شود و همه آدرسها در کمبوباکس نمایش داده می شود و هر آدرس مربوط به یک دانش آموز می باشد و هر کدام از آدرسها در کمبوباکس انتخاب شد اطلاعات مربوط دانش آموزی که آدرس آن در کمبوباکس انتخاب شده است در همه جدولها حذف شود

اسکریپت به صورت زیر است
Creating table 'students'CREATE TABLE [dbo].[students] (
[Id] int IDENTITY(1,1) NOT NULL,
[namestudent] nvarchar(max) NOT NULL,
[familystudent] nvarchar(max) NOT NULL
);
GO


-- Creating table 'proptiesstudents'
CREATE TABLE [dbo].[proptiesstudents] (
[Id] int IDENTITY(1,1) NOT NULL,
[address] nvarchar(max) NOT NULL,
[sex] nvarchar(max) NOT NULL,
[tel] nvarchar(max) NOT NULL,
[activestudentId] int NOT NULL
);
GO


-- Creating table 'activestudent'
CREATE TABLE [dbo].[activestudent] (
[Id] int IDENTITY(1,1) NOT NULL,
[coursename] nvarchar(max) NOT NULL,
[couseteacher] nvarchar(max) NOT NULL,
[studentcode] nvarchar(max) NOT NULL,
[studentId] int NOT NULL
);
GO


-- Creating table 'schools'
CREATE TABLE [dbo].[schools] (
[Id] int IDENTITY(1,1) NOT NULL,
[schoolname] nvarchar(max) NOT NULL,
[studentId] int NOT NULL
);
GO


-- Creating table 'cityschools'
CREATE TABLE [dbo].[cityschools] (
[Id] int IDENTITY(1,1) NOT NULL,
[namecity] nvarchar(max) NOT NULL
);
GO


-- --------------------------------------------------
-- Creating all PRIMARY KEY constraints
-- --------------------------------------------------


-- Creating primary key on [Id] in table 'students'
ALTER TABLE [dbo].[students]
ADD CONSTRAINT [PK_students]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO


-- Creating primary key on [Id] in table 'proptiesstudents'
ALTER TABLE [dbo].[proptiesstudents]
ADD CONSTRAINT [PK_proptiesstudents]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO


-- Creating primary key on [Id] in table 'activestudent'
ALTER TABLE [dbo].[activestudent]
ADD CONSTRAINT [PK_activestudent]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO


-- Creating primary key on [Id] in table 'schools'
ALTER TABLE [dbo].[schools]
ADD CONSTRAINT [PK_schools]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO


-- Creating primary key on [Id] in table 'cityschools'
ALTER TABLE [dbo].[cityschools]
ADD CONSTRAINT [PK_cityschools]
PRIMARY KEY CLUSTERED ([Id] ASC);
GO


-- --------------------------------------------------
-- Creating all FOREIGN KEY constraints
-- --------------------------------------------------


-- Creating foreign key on [studentId] in table 'schools'
ALTER TABLE [dbo].[schools]
ADD CONSTRAINT [FK_studentschool]
FOREIGN KEY ([studentId])
REFERENCES [dbo].[students]
([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;


-- Creating non-clustered index for FOREIGN KEY 'FK_studentschool'
CREATE INDEX [IX_FK_studentschool]
ON [dbo].[schools]
([studentId]);
GO


-- Creating foreign key on [studentId] in table 'activestudent'
ALTER TABLE [dbo].[activestudent]
ADD CONSTRAINT [FK_studentactivestudent]
FOREIGN KEY ([studentId])
REFERENCES [dbo].[students]
([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;


-- Creating non-clustered index for FOREIGN KEY 'FK_studentactivestudent'
CREATE INDEX [IX_FK_studentactivestudent]
ON [dbo].[activestudent]
([studentId]);
GO


-- Creating foreign key on [activestudentId] in table 'proptiesstudents'
ALTER TABLE [dbo].[proptiesstudents]
ADD CONSTRAINT [FK_activestudentproptiesstudent]
FOREIGN KEY ([activestudentId])
REFERENCES [dbo].[activestudent]
([Id])
ON DELETE NO ACTION ON UPDATE NO ACTION;


-- Creating non-clustered index for FOREIGN KEY 'FK_activestudentproptiesstudent'
CREATE INDEX [IX_FK_activestudentproptiesstudent]
ON [dbo].[proptiesstudents]
([activestudentId]);
GO

bitcob589
جمعه 09 اسفند 1392, 16:52 عصر
با توجه به توضیحات پست قبل چگونه می توان در join رکودهای مورد نظر حذف کرد اگر امکان دارد با کد نحوه حذف کردن بفرمایید

Mahmoud.Afrad
جمعه 09 اسفند 1392, 17:35 عصر
همونطور که گفته شد میتونی از cascade delete استفاده کنی در اینصورت کافیه دانش آموز رو حذف کنی تا اطلاعات وابسته هم حذف بشه.
http://stackoverflow.com/questions/4454861/how-do-i-edit-a-table-in-order-to-enable-cascade-delete-sql



یا اینکه اطلاعات رو دستی حذف کنی. در اینصورت باید از جداول وابسته(فرزند) شروع به حذف کنی و در آخر جدول اصل(والد):
من فرض میکنم لیست دانش آموزان رو در یک کمبو لود کردی و با انتخاب از کمبو میخوای اون دانش آموز و همه اطلاعات وابسته رو حذف کنی. نیازی به join نداری
ابتدا آیدی دانش آموز رو از کمبو بدست میاری و بعد حذف میکنی.
(چون ارتباط ها رو تعیین کردی میتونی از طریق students به جداول وابسته دسترسی داشته باشی)

int id = (int)comboBox1.SelectedValue;
DataClasses1DataContext ee = new DataClasses1DataContext();
var stu = (from s in ee.students
where s.Id == id
select s).SingleOrDefault();
if (stu != null)
{
ee.activestudents.DeleteAllOnSubmit(stu.activestud ents);
foreach (activestudent a in stu.activestudents)
{
ee.proptiesstudents.DeleteAllOnSubmit(a.proptiesst udents);
}
ee.schools.DeleteAllOnSubmit(stu.schools);
ee.students.DeleteOnSubmit(stu);
ee.SubmitChanges();
}