生成模型后,会自动映射许多关系。然而,一些关系是"不正确" (或者至少,不是我想要的),或者失踪。
我不怀疑这是因为数据库设计不佳,但根据我在这个项目中的角色,我无法解决这个问题。但是,我的应用程序代码中是否可以执行某些操作来修复映射?
以下是一个例子:
我想将StoreProductId属性映射到StoreProducts表。
public partial class ProductAttributePriceAdjustment
{
public int AdjustmentId { get; set; }
public int StoreProductId { get; set; }
public int StoreId { get; set; }
public string ProductId { get; set; }
public Nullable<int> ProductSizeId { get; set; }
public Nullable<decimal> Adjustment { get; set; }
public int PointsAdjustment { get; set; }
public Nullable<int> ProductColorID { get; set; }
public StoreProduct StoreProduct { get; set; }
}
public partial class StoreProduct
{
public int StoreProductID { get; set; }
public int StoreID { get; set; }
public string ProductID { get; set; }
public bool Featured { get; set; }
public bool Clearance { get; set; }
}
在我看来,当我尝试调用类似的东西时:
@adjustment.StoreProduct.ProductID
我收到此错误:
Object reference not set to an instance of an object.
我跟随弗兰斯&#39;建议并将我的模型更新为:
public partial class ProductAttributePriceAdjustment
{
public int AdjustmentId { get; set; }
public int StoreProductId { get; set; }
public int StoreId { get; set; }
public string ProductId { get; set; }
public Nullable<int> ProductSizeId { get; set; }
public Nullable<decimal> Adjustment { get; set; }
public int PointsAdjustment { get; set; }
public Nullable<int> ProductColorID { get; set; }
public virtual StoreProduct StoreProduct { get; set; }
}
但我仍然得到同样的错误。
答案 0 :(得分:2)
您不能在此类实体框架中创建1:1映射。它不受支持。
实体框架仅支持1:1映射,其中两个表都具有共享主键(即它们具有相同的主键,其中一个是另一个的外键)。在您的情况下,您实际上创建了1到多个,因为无法保证StoreProductId是唯一的。