database - 播种方法是插入具有 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,使用代码优先方法,没有迁移(还)。请问有人有什么建议吗?
解决方案
编辑 我创建了一个测试应用程序,以便能够测试并达到 100%。我还不知道为什么,但我和以前有相同的关系(价格实体只有 1 个产品参考(正在创建重复))而且我没有重复...
所以我可以拥有我想要的关系,即 1 价格应该只有 1 个产品参考,但我完全不知道这里发生了什么......
将实体产品的 PurchasePrice 类中的关系更改为 ICollection 而不是 1 个单一产品不会创建欺骗(并创建 PurchasePriceProduct 表)。
从数据库日志(log4net)看来,由于关系 EF 首先为 Product 的 PurchasePrice Reference 插入 Product (NULL),并插入 Product (NOT NULL)及其引用......(如果有人需要任何澄清在此让我知道我会尽力而为)
这篇文章已移至此处。 我要感谢所有以任何方式做出贡献的人!
推荐阅读
- jquery - 自动切换相互重叠的图像
- url - 淘汰赛 - 网址路由 - 参数
- r - 如何在 ggplot2 中对分类数据使用 stat() 命令?
- r - 根据 ggplot2 中的“x”值在图的两侧(左右)绘制一个“geom_rug”
- xml - 使用 Dart / Flutter 从 URL 获取远程 XML
- github - 从 GH 包安装 NPM:在本地工作,但不能在 GH 操作中使用
- java - 使用 com.coveo.SamlClient 依赖的单次注销
- python - Django 迁移错误:TypeError:int() 参数必须是字符串、类似字节的对象或数字,而不是 'datetime.datetime'
- google-cloud-platform - 谷歌云存储只删除自己的对象
- ios - iOs 13 上的 Chrome 78 未定义 navigator.mediaDevices