Tôi có cấu trúc dữ liệu sau đây:Entity Framework nhiều người thuê chia sẻ kiến trúc dữ liệu: Cột duy nhất, nhiều phím nước ngoài
//property Notification
abstract class BindableBase { }
//base class for all tenant-scoped objects
abstract class TenantModelBase : BindableBase
{
int TenantId;
}
abstract class Order : TenantModelBase
{
Customer Customer; //works: mapped using TenantId and CustomerId
Product Product; //again, works with TenantId and ProductId
string ProductId;
string CustomerId;
}
class Customer: TenantModelBase
{
string CustomerId;
}
class Product : TenantModelBase
{
string ProductId;
}
class SpecialOrder : Order
{
OtherClass OtherClass; //this fails!, see below
string OtherClassId;
}
class SuperSpecialOrder : SpecialOrder { }
class OtherClass : TenantModelBase
{
string OtherClassId;
}
tôi nhận được lỗi sau:
The foreign key component 'TenantId' is not a declared property on type 'SpecialOrder'. Verify that it has not been explicitly excluded from the model and that it is a valid primitive property.
Lỗi xảy ra bằng cách sử dụng cấu hình Api thạo :
config.HasRequired(p => p.OtherClass)
.WithMany(oc => oc.SpecialOrders)
.HasForeignKey(p => new { p.TenantId, p.OtherClassId});
Nếu không có OtherClass
tham chiếu trong SpecialOrder
Tôi có thể tạo các đối tượng một cách tự do mà không gặp vấn đề gì (bao gồm SpecialOrder
, SuperSpecialOrder
v.v.).
Bất kỳ ai có manh mối gì đang xảy ra? Tôi đang bị mất ở đây :(
Sửa Tôi đã nhìn thấy trong các câu hỏi khác mà mọi người loại bỏ các TenantId từ các bảng, đây không phải là một lựa chọn từ khóa chính không phải là duy nhất trên toàn thuê nhà và chúng tôi muốn giữ lại chia sẻ kiến trúc dữ liệu.
tôi biết cách giải quyết là có một TenantId thứ hai trong lớp SpecialOrder, nhưng điều này dường như không hợp lý với tôi.
Tôi nghĩ rằng đó là cùng một loại vấn đề như thế này: http: // stackoverflow.com/questions/10961690/inheritance-and-composite-foreign-keys-một phần-of-the-key-trong-cơ sở-lớp-các Bạn có thể hiển thị bản đồ của bạn chính xác hơn? 'Config' là gì? Tôi đoán một 'EntityTypeConfiguration' với 'T' =' SpecialOrder', phải không? Ánh xạ trông như thế nào đối với 'Order.Customer'? Bạn có tạo bản đồ này với 'T' =' SpecialOrder' hoặc 'T' =' Order'? –
Slauma
Sự cố xảy ra khi tôi chỉ định ánh xạ cho cả Đơn đặt hàng và Đơn hàng đặc biệt. Sau đó nó sẽ mất đi bất kỳ tài sản nào được khai báo trong lớp cơ sở tại SpecialOrder. Nó có vẻ là cùng một câu hỏi. – Bas