Làm cách nào để ánh xạ mối quan hệ sau trong Khung thực thể 5?Khuôn khổ thực thể 5 Mã mối quan hệ tự tham chiếu đầu tiên
public class Item {
public int Id { get; set; }
public int? ParentItemId { get; set; }
public string Value { get; set; }
public Item ParentItem { get; set; }
public List<Item> ChildItems { get; set; }
}
Tôi đã thử điều này:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasOptional(i => i.ParentItem)
.WithMany(i => i.ChildItems)
.HasForeignKey(i => i.ParentItemId);
}
và điều này:
protected override void OnModelCreating(DbModelBuilder modelBuilder) {
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Item>()
.HasMany(i => i.ChildItems)
.WithOptional(i => i.ParentItem)
.HasForeignKey(i => i.ParentItemId);
}
mà cả hai kết quả trong lỗi này:
Các loại tất cả các thuộc tính trong phụ thuộc Vai trò của ràng buộc tham chiếu phải giống như các loại thuộc tính tương ứng trong Pri ncipal Vai trò.
Nếu tôi bắt đầu với bản đồ cơ sở dữ liệu đầu tiên, đây là những gì các thực thể được tạo ra trông giống như:
public partial class Item
{
public Item()
{
this.ChildItems = new HashSet<Item>();
}
public int Id { get; set; }
public Nullable<int> ParentItemId { get; set; }
public string Value { get; set; }
public virtual ICollection<Item> ChildItems { get; set; }
public virtual Item ParentItem { get; set; }
}
Tôi biết điều này sẽ làm việc nếu tôi bắt đầu với db-đầu tiên, tôi chỉ cần biết làm thế nào để xác định mối quan hệ trong mã đầu tiên.
là 'Id' key property? Hay bạn có ánh xạ khóa (với Fluent API?) Đến một thuộc tính khác, ví dụ như 'Giá trị'? – Slauma
Id là thuộc tính khóa chính của Mục. – user326502
"* loại của tất cả các thuộc tính trong Vai trò phụ thuộc *" có nghĩa là các loại thuộc tính FK là 'ParentItemId' và có kiểu' int? '. "* các loại thuộc tính tương ứng trong Vai trò chính *" có nghĩa là các loại thuộc tính PK là 'Id' và có kiểu' int'. Họ là như nhau (nullability không quan trọng). Tuy nhiên, ngoại lệ cho biết, họ không. Ngoại lệ sẽ xảy ra nếu bạn có một ví dụ 'long' (hoặc bất kỳ loại nào khác) cho PK và một' int? 'Cho FK. Khá lạ ... – Slauma