再一次使用無法更改的遺留數據庫以及使用Entity Framework 4.1和Fluent API僅讀取數據。一對多帶有連接表和一個可選關係的實體框架4.1 Fluent API
public class Client
{
[Key]
public int ClientID { get; set; }
public string Name { get; set ;}
public virtual ICollection<Phone> Phones { get; set; }
}
public class Phone
{
[Key]
public int PhoneID { get; set; }
public string Number { get; set; }
public virtual Client Client { get; set; }
}
public class ClientPhone
{
[Key]
[Column(Order=0)]
public int ClientID { get; set; }
[Key]
[Column(Order=1)]
public int PhoneID { get; set; }
}
我希望客戶端有很多電話,但電話應該只有一個可選的客戶端。 注意:電話應該只有0 | 1個客戶端。我不想要很多。 所以我嘗試了以下內容:「在類型每個屬性名稱必須是唯一的」
modelBuilder.Entity<Client>()
.HasMany(c => c.Phones)
.WithOptional(p => p.Client)
.Map(m =>
{
m.MapKey("ClientID");
m.ToTable("ClientPhone");
});
modelBuilder.Entity<Phone>()
.HasOptional(p => p.Client)
.WithMany(c => c.Phones)
.Map(m =>
{
m.MapKey("PhoneID");
m.ToTable("ClientPhone");
});
我試過一對夫婦排列通常獲取有關錯誤的
感謝您的幫助。
使用答案
編輯這裏是我的實體類所做的修改。可以從一個客戶端導航到多個電話和從一個電話到一個客戶端,但是您必須通過ClientPhone連接表。
[Table("Client")]
public class Client
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int ClientID { get; set; }
public string Name { get; set ;}
public virtual ICollection<Phone> Phones { get; set; } // Client has * Phones
}
[Table("Phone")]
public class Phone
{
[Key]
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
public int PhoneID { get; set; }
public string Number { get; set; }
public virtual Client Client { get; set; } // Phone has 0|1 Client
}
[Table("ClientPhone")]
public class ClientPhone
{
// Removed the Key attribute
public int ClientID { get; set; }
[Key] // Left the Key on the 0|1 side
[ForeignKey("Phone")]
public int PhoneID { get; set; }
public virtual Client Client { get; set; } // One Client
public virtual Phone Phone { get; set; } // One Phone
}
您的表格是如何定義的?你在數據庫中擁有哪些表格以及配置了哪些關係?如果數據庫包含多對多和聯結表,則不能將它映射爲一對多。 –