首页 > 解决方案 > 播种方法是插入具有 NULL 值的附加实体

问题描述

我突然出现了这种奇怪的行为(我在版本控制(tfs)中比较了我的文件,以确保我没有更改任何内容,也没有发现任何不同之处)。

我正在用一些元数据播种我的数据库,我发现它有一个我以前从未见过的非常奇怪的行为。我正在插入一个实体“产品”,它插入了这个实体2 次,第一次插入是正确的并且具有它应该具有的所有内容,另一个具有 NULL 属性(字符串值)但有些(如日期时间)具有值。

我完全不知道为什么会发生这种情况,当我调用 base.Seed(ctx); 时就会发生这种情况。方法,我敢肯定,因为我在此之后停止了 Webapp,然后才到达其他任何地方。

这个实体产品有相关的实体,所有其他数据都是在我的表中正确创建的。除了这个产品没有任何问题。

我试图只播种 1 个产品实体,而不是添加其他相同的结果。我监督了一些事情:还有其他实体正在播种,所以我去看看它发生在哪里,它是在图片中添加 PurchasePrice 时发生的:

我的产品实体:

public class Product : BaseEntity
{
   public  ICollection<Supplier> Suppliers { get; set; }
   public  ICollection<PurchasePrice> PurchasePrices { get; set; }
}

我的供应商实体:

public class Supplier : BaseEntity
{
   public ICollection<PurchasePrice> PurchasePrices { get; set; }
   public  ICollection<Product> Products { get; set; }
}

我的 PurchasePrice 实体:

public  class PurchasePrice:BaseEntity
{
   public decimal Value { get; set; }   
   public Supplier Supplier { get; set; }
   public Product Product { get; set; }
}

播种:

Supplier supplier1 = new Supplier("Microsoft", "Microsoft is the best supplier but its expensive", "btw nummer", "0800-123456", "microsoft@email.com", "contact person name");
ctx.Suppliers.Add(supplier1);

PurchasePrice purchaseprice = new PurchasePrice((decimal)17.70, supplier1);
ctx.PurchasePrices.Add(purchaseprice);

Product product1 = new Product("test product 1", supplier1, purchaseprice);
ctx.Products.Add(product1);

base.Seed(ctx);

不知道我应该看哪里,因为我的模型没有任何改变,我的播种方式也没有改变。我尝试使用 AddOrUpdate() 但没有奏效。

我在 MVC Web 应用程序中使用 EF6,使用代码优先方法,没有迁移(还)。请问有人有什么建议吗?

标签: databaseentity-framework-6ef-code-firstseedingdbnull

解决方案


编辑 我创建了一个测试应用程序,以便能够测试并达到 100%。我还不知道为什么,但我和以前有相同的关系(价格实体只有 1 个产品参考(正在创建重复))而且我没有重复...

所以我可以拥有我想要的关系,即 1 价格应该只有 1 个产品参考,但我完全不知道这里发生了什么......

将实体产品的 PurchasePrice 类中的关系更改为 ICollection 而不是 1 个单一产品不会创建欺骗(并创建 PurchasePriceProduct 表)。

从数据库日志(log4net)看来,由于关系 EF 首先为 Product 的 PurchasePrice Reference 插入 Product (NULL),并插入 Product (NOT NULL)及其引用......(如果有人需要任何澄清在此让我知道我会尽力而为)

这篇文章已移至此处我要感谢所有以任何方式做出贡献的人!


推荐阅读