EF代码优先关系问题

本文关键字:关系 问题 代码 EF | 更新日期: 2023-09-27 18:27:37

我目前正在使用实体框架代码优先,但在使关系正常工作时遇到了一些问题。。

我有以下内容:

public class StockLevel : BaseEntity
{
    public int ProductId { get; set; }
    public int StockLevel { get; set; }
    public virtual Product Product { get; set; }
}

我的Product表和实体已经在工作,但当我开始构建StockLevel表时,我希望它包括一个Product对象,所以在StockLevel表中,会有一个ProductId外键引用Product表上的产品,但我不想修改EF中的Product实体,但我得到了以下错误:

此关联的主体端必须使用关系fluent API或数据注释显式配置。

EF代码优先关系问题

由于错误说明,您需要使用fluent API或Data Annotations配置关系。我更熟悉数据注释,所以我会在回答中使用它们。

要指示Product属性是使用ProductId设置的,您需要在ProductId属性中添加ForeignKey属性:

[ForeignKey("Product")]
public int ProductId { get; set; }

这应该足以让它发挥作用。有关详细信息,请参阅MSDN文章。

您可以实现如下的get和set方法:

public string ProductName
{
    get
    {
        if (this.yourEntityReference.EntityKey == null) return "";
        else return (string)this.yourEntityReference
            .EntityKey.EntityKeyValues[0].Value;
    }
    set
    {
        this.yourEntityReference.EntityKey
           = new EntityKey("YourDB.YourTable", "ColumnName", value);
    }
}