gpt4 book ai didi

c# - EF6.x CodeFirst 一对多关系

转载 作者:行者123 更新时间:2023-11-30 23:07:23 25 4
gpt4 key购买 nike

考虑我有以下类(class);

产品类别

鱼制品

非鱼产品

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

从逻辑上讲,当我随后添加我的上下文(为三个类使用 DbSet)并开始添加迁移时,它应该构建我的三个类并推断出正确的关系。相反,尽管我在添加迁移步骤中收到以下错误

<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

最佳答案

你在使用 PostSharp 吗?

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

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

关于c# - EF6.x CodeFirst 一对多关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47352415/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com