【问题标题】:Seeding method is inserting additional Entities with NULL values播种方法是插入具有 NULL 值的附加实体
【发布时间】:2018-12-05 14:46:10
【问题描述】:

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

我正在使用一些元数据为我的数据库播种,我发现它有一种我以前从未见过的非常奇怪的行为。我正在插入一个实体“产品”,它插入了这个实体 2 次​​strong>,第一个插入是正确的并且具有它应该具有的所有内容,另一个具有 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,使用代码优先方法(尚未)。 请问大家有什么建议吗?

【问题讨论】:

  • 编辑了原帖
  • 任何人都有建议,我是否忽略了导致此问题的关系?亲切的问候
  • 你有没有调用这个Database.SetInitializer()。
  • 我建议你做一个调试,仔细看表。这可能会向您显示负责复制的方法。这可能是由于继承而发生的,因此当您创建一个新对象时,会隐式调用一个方法。

标签: database entity-framework-6 ef-code-first seeding dbnull


【解决方案1】:

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

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

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

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

这篇文章HAS MOVED TO HERE我要感谢所有以任何方式做出贡献的人!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    • 2016-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-26
    相关资源
    最近更新 更多