播种方法是插入具有NULL值的其他实体

时间:2018-12-05 14:46:10

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

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

我正在用一些元数据为数据库播种,我发现它具有我从未见过的非常奇怪的行为。我正在插入一个实体“ Product”,它会插入该实体 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(尚无迁移)。 请问有人有建议吗?

1 个答案:

答案 0 :(得分:0)

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

所以我可以得到我想要的关系:1价格应该只有1个产品参考,但是我绝对不知道这里发生了什么...

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

从数据库日志(log4net)看来,由于关系EF首先要为产品的PurchasePrice引用插入一个产品(NULL),然后将带有引用的产品(NOT NULL)插入...(如果有人需要对此进行任何澄清,让我知道我会尽力而为)

此帖子HAS MOVED TO HERE我要感谢以任何方式做出贡献的所有人!