EF6.x CodeFirst一对多关系

时间:2017-11-17 14:03:17

标签: c# entity-framework-6 ef-code-first

考虑我有以下课程;

产品分类

FishProduct

NonFishProduct

ProductCategory可以有许多FishProducts和/或许多NonFishProducts,这是一个非常简单的一对多关系。在我的ProductCategory类中,我有以下内容;

   public ProductCategory()
    {
        FishProducts = new HashSet<FishProduct>();
        NonFishProducts = new HashSet<NonFishProduct>();

    }


    public ICollection<FishProduct> FishProducts { get; set; }

    public ICollection<NonFishProduct> NonFishProducts { get; set; }

在FishProduct和NonFishProduct中我有以下内容;

public int ProductCategoryId { get; set; }

    public virtual ProductCategory ProductCategory { get; set; }

逻辑上,当我然后添加我的上下文(使用DbSets为三个类)并绕过添加迁移时,它应该构建我的三个类并推断出正确的关系。相反,虽然我在添加迁移步骤

期间收到以下错误
<ProductCategory>k__BackingField: Name: The specified name is not allowed: '<ProductCategory>k__BackingField'.
<ProductCategory>k__BackingField: Name: The specified name is not allowed: '<ProductCategory>k__BackingField'.
SalesAndPurchases.NonFishProduct_<ProductCategory>k__BackingField: Name: The specified name is not allowed: 'NonFishProduct_<ProductCategory>k__BackingField'.
NonFishProduct_<ProductCategory>k__BackingField_Source: Name: The specified name is not allowed: 'NonFishProduct_<ProductCategory>k__BackingField_Source'.
NonFishProduct_<ProductCategory>k__BackingField_Target: Name: The specified name is not allowed: 'NonFishProduct_<ProductCategory>k__BackingField_Target'.
SalesAndPurchases.FishProduct_<ProductCategory>k__BackingField: Name: The specified name is not allowed: 'FishProduct_<ProductCategory>k__BackingField'.
FishProduct_<ProductCategory>k__BackingField_Source: Name: The specified name is not allowed: 'FishProduct_<ProductCategory>k__BackingField_Source'.
FishProduct_<ProductCategory>k__BackingField_Target: Name: The specified name is not allowed: 'FishProduct_<ProductCategory>k__BackingField_Target'.
NonFishProduct_<ProductCategory>k__BackingField: Name: The specified name is not allowed: 'NonFishProduct_<ProductCategory>k__BackingField'.
FishProduct_<ProductCategory>k__BackingField: Name: The specified name is not allowed: 'FishProduct_<ProductCategory>k__BackingField'.

我对这个错误所做的所有搜索似乎都指向人们在名称的开头使用了下划线,我没有,以及我所看到的每个例子都是如何创建一个到多个codefirst中的关系似乎遵循这些方针。

任何人都可以了解我在这里做错了什么。

修改

响应请求,这里是FishProduct类的完整代码

   namespace SalesAndPurchases
{
    [Table("FishProducts", Schema = "SalesAndPurchases")]
    public class FishProduct : ProductBase
    {
        [StringLength(3)]
        public string SpeciesCode { get; set; }

        public string FreshnessCode { get; set; }

        [StringLength(3)]
        public string StateCode { get; set; }

        [StringLength(3)]
        public string PresentationCode { get; set; }

        [StringLength(1)]
        public string SizeCode { get; set; }

        public int ProductCategoryId { get; set; }

        public virtual ProductCategory ProductCategory { get; set; }

    }
}

因为FishProduct和NonFishProduct共享一些我创建基类的常见元素(它没有映射到表)

namespace SalesAndPurchases
{
    public abstract class ProductBase : VtlEntityBase
    {
        public string ProductDescription { get; set; }
        public string IntrastatCode { get; set; }


    }
}

为了完整起见,这里是所有模式中所有实体的基类;

    namespace VtlCommon
{
    [NotifyPropertyChanged]
    public abstract class VtlEntityBase
    {
        [Key]
        public int Id { get; set; }

        public DateTime DateCreated { get; set; }

        public DateTime DateChanged { get; set; }

        [Timestamp]
        public byte[] RowVersion { get; set; }

    }
}



enter code here

1 个答案:

答案 0 :(得分:2)

您使用的是PostSharp吗?

根据这个问题,PostSharp喜欢在属性名称中插入“k__BackingField”。该问题的答案为解决方案提供了一些建议。

PostSharp inserting k__Backing Field into Entity Class, causing Database generation to fail