Tôi cố gắng để thiết lập một mô hình Entity Framework với một tùy chọn: mối quan hệ không bắt buộc:Entity Framework tùy chọn: tùy chọn mối quan hệ
Trong trường hợp của tôi, đôi khi một bản ghi AdditionalData tồn tại mà điểm lên mức kỷ lục BaseTable, nhưng đôi khi BaseTable hoặc Các bản ghi AdditionalData tồn tại mà không có bất kỳ liên kết nào. Khóa ngoài của BaseTable (nếu nó tồn tại) nằm trên bảng AdditionalData.
Tôi muốn có thể điều hướng qua lại giữa BaseTable và bất kỳ AdditionalDatas nào có thể được kết nối.
BaseTable 0..1 ----- 0..1 AdditionalData1
\
--- 0..1 AdditionalData2
public class BaseTable {
public int Id { get; set; }
public virtual AdditionalType1 AdditionalType1 { get; set; }
public virtual AdditionalType2 AdditionalType2 { get; set; }
}
public class AdditionalType1 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
public class AdditionalType2 {
public int Id { get; set; }
public int? BaseTableId { get; set; }
public virtual BaseTable BaseTable { get; set; }
}
Làm thế nào để làm cho công việc này? Tôi đã như xa như:
modelBuilder.Entity<AdditionalType1>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType1)
.Map(a => a.MapKey("BaseTableId"));
modelBuilder.Entity<AdditionalType2>()
.HasOptional(zmt => zmt.BaseTable)
.WithOptionalDependent(zm => zm.AdditionalType2)
.Map(a => a.MapKey("BaseTableId"));
nhưng nó nói với tôi điều này:
error: (1564,6) : error 0019: Each property name in a type must be unique. Property name 'BaseTableId' was already defined.
Tôi không biết chính xác những gì mà đề cập đến, và không chắc chắn làm thế nào để sửa chữa.
EDIT: Nếu tôi loại bỏ các khoản Map/MapKey như đề xuất ở đây (https://stackoverflow.com/a/8016308/237091) Tôi nhận được lỗi này thay vào đó, khi một truy vấn chạy sử dụng nó:
Invalid column name 'BaseTable_Id' as it maps itself to BaseTable_Id automatically instead of my BaseTableId field.
'Đôi khi một BaseTable tồn tại' Hoặc bạn muốn tạo hàng trong bảng cơ sở cho người dùng hoặc bạn có một sự hiểu biết rất xấu về cách cơ sở dữ liệu hoạt động. Nó không giống như con mèo của Schrodinger, cho dù cơ sở dữ liệu của bạn có một Bảng đã được xác định tại thời điểm thiết kế. – MrFox
@ Fox Fox: Đã được chỉnh sửa để làm rõ - Tôi đã nói về hồ sơ chứ không phải sự tồn tại thực sự của bảng. –