实体框架Database First& EF Code First按ID获取关系对象

时间:2012-08-08 04:39:41

标签: entity-framework code-first ef-database-first

在EF数据库中第一次更改ForeignKey(CommodityGroupID)时自动获取CommodityGroup for Commodity对象,但是在EF Code First(4.3.1)中没有这样做。

public class Commodity  
        {
            public int CommodityID { get; set; }
            public string MadeBy { get; set; }
            public decimal ServiceTimePrice { get; set; }
            public decimal QCPrice { get; set; }
            public int ServicePoint { get; set; }
            public string Note { get; set; }
            public int CommodityGroupID { get; set; }
            [ForeignKey("CommodityGroupID")]
            public virtual CommodityGroup CommodityGroup { get; set; }
    }
    public class CommodityGroup
    { 
        public int CommodityGroupID { get; set; }
        public string CommodityGroupName { get; set; } 
        public virtual ICollection<Commodity> Commodities { get; set; }

    }

此属性在Edmx文件(数据库优先)中定义,我应该首先在ef代码中定义此代码吗?

[BrowsableAttribute(false)]
[DataMemberAttribute()]
public EntityReference<CommodityGroup> CommodityGroupReference
{
    get
    {
        return ((IEntityWithRelationships)this).RelationshipManager.GetRelatedReference<CommodityGroup>("GaamRepairModel.FK_Commodity_CommodityGroup", "CommodityGroup");
    }
    set
    {
        if ((value != null))
        {
            ((IEntityWithRelationships)this).RelationshipManager.InitializeRelatedReference<CommodityGroup>("GaamRepairModel.FK_Commodity_CommodityGroup", "CommodityGroup", value);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

听起来你想要一个改变跟踪代理。您希望CommodityGroup导航属性在FK更改正确时自动更新吗?

有关更改跟踪代理的详细信息,请参阅this post on MSDN

这个post on MSDN显示了一些关于如何正确创建代理对象测试的代码。

这是一个新对象吗?如果是这样,您需要在DbSet上调用CreateObject函数,而不是使用New Commodity()。