سلام
من می خوام با codefirst یه رابطه ی 1-1 رو ایجاد کنم و به وسیله ی Fluent API رابطه رو config کنم ولی به من اجازه ی گرفتن کلید فیلدی به عنوان کلید خارجی رو نمیده.
به نظر شما با این روش(Fluent API) راهی هست بتونم؟
سلام
من می خوام با codefirst یه رابطه ی 1-1 رو ایجاد کنم و به وسیله ی Fluent API رابطه رو config کنم ولی به من اجازه ی گرفتن کلید فیلدی به عنوان کلید خارجی رو نمیده.
به نظر شما با این روش(Fluent API) راهی هست بتونم؟
برای رابطه یک به یک فقط کافی هست تا درون هرکلاس یک Navigation Property (به رنگ آبی مشخصه) از کلاس دیگر پیاده کنید مثال کلاس دانش اموز و کلاس آدرس
در رابطه یک به یک مهم اونه که باید طرف Principal یعنی اون کلاسی که باید اول اطلاعات درونش ذخیره بشه رو مشخص کرد
public class Student
{
public Student() { }
public int StudentId { get; set; }
public string StudentName { get; set; }
public virtual StudentAddress StudentAddress { get; set; }
}
public class StudentAddress
{
[Key, ForeignKey("Student")]
public int StudentId { get; set; }
public string Address1 { get; set; }
public string Address2 { get; set; }
public string City { get; set; }
public int Zipcode { get; set; }
public string State { get; set; }
public string Country { get; set; }
public virtual Student Student { get; set; }
}
ممنون اینو میدونستم من میخواستم اولا با fluentapi باشه بعدم کلیدخارجیم میخواستم تعریف کنم
public class StudentConfig : EntityTypeConfiguration<Student>
{
public StudentConfig()
{
// one-to-one
this.HasOptional(x => x.StudentAddress )
.WithRequired(x => x.Student)
.WillCascadeOnDelete();
}
}
Principal : طرفی که ابتدا در بانک اطلاعاتی ذخیره خواهد شد.
Dependent : طرفی که پس از ثبت Principal در بانک اطلاعاتی ذخیره میشود.
Principal میتواند بدون نیاز به Dependent وجود داشته باشد.
وجود Dependent بدون Principal ممکن نیست زیرا ارتباط بین این دو توسط یک کلید خارجی تعریف میشود.
میتوانید هر کدام دلخواهتان هست از موجودیتها را به عنوان رابطه Principal یا Dependent انتخاب کرد
من مشکلم این بود که می خواستم مثل رابطه های یک به چند یه فیلد جدا به عنوان کلید خارجی بگیرم . در صورتی که تو رابطه ی یک به یک کلید اصلی principal کلید اصلی dependent هم میشه .فقط باید بعد از تنظیم رابطه دقیقا یه فیلد مثله کلید principal توی dependent به عنوان کلید تعریف کنیم. اونوقت همه چی حل میشه
عزیز من وقتی توی هر دوطرف رابطه یک Navigtion از نوع کلاس اون یکی تعریف کنی میشه رابطه 1 به 1
و توی بانک اطلاعاتی اگر نکاه کنید دوتا کلید اصلی درون هردو جدول میسازه در این مثال StudentId کلید اصلی هردوجدول هست
وقتی هم تنظیمات زیر انجام دادیم میاد کلید اصلی جدول StudentAddress تبدیل به Foreignkey میکنه
یعنی عبارات لامبدایی که جلوی HasOptional قرار میگیره میشه کلید فرعی یا خارجی وبا WithRequired کلید اصلی یا principal مشخص میشه
دیگه از این ساده تر نمیتونستم بگم
this.HasOptional(x => x.StudentAddress )
.WithRequired(x => x.Student)
.WillCascadeOnDelete();