如何使用Database First建立一对一的关系?

时间:2014-09-11 20:44:29

标签: c# asp.net entity-framework

生成模型后,会自动映射许多关系。然而,一些关系是"不正确" (或者至少,不是我想要的),或者失踪。

我不怀疑这是因为数据库设计不佳,但根据我在这个项目中的角色,我无法解决这个问题。但是,我的应用程序代码中是否可以执行某些操作来修复映射?

以下是一个例子:

我想将StoreProductId属性映射到StoreProducts表。

tables

ProductAttributePriceAdjustment

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; }
}

StoreProduct

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.

更新1

我跟随弗兰斯&#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; }
}

但我仍然得到同样的错误。

1 个答案:

答案 0 :(得分:2)

您不能在此类实体框架中创建1:1映射。它不受支持。

实体框架仅支持1:1映射,其中两个表都具有共享主键(即它们具有相同的主键,其中一个是另一个的外键)。在您的情况下,您实际上创建了1到多个,因为无法保证StoreProductId是唯一的。