播种方法正在插入具有 NULL 值的其他实体
Seeding method is inserting additional Entities with NULL values
我突然遇到了这种奇怪的行为(我已经比较了版本控制 (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 没有迁移(尚未)。
有人有什么建议吗?
编辑
我已经创建了一个测试应用程序来测试并成为 100%。
我还不知道为什么,但我与以前有相同的关系(价格实体只有 1 个产品参考(即创建重复项))并且我没有重复项...
所以我可以得到我想要的关系,即 1 个价格应该只有 1 个产品参考,但我完全不知道这里发生了什么......
将实体产品的 PurchasePrice Class 中的关系更改为 ICollection 而不是 1 个单一产品 不会 创建一个欺骗(并创建一个 PurchasePriceProduct table).
从数据库日志 (log4net) 看来,由于关系,EF 首先为产品的 PurchasePrice 参考插入产品(NULL),然后插入产品(NOT NULL)及其参考...(如果有人需要对此进行任何澄清,请告诉我我会尽力而为)
这个post。
我要感谢所有以任何方式做出贡献的人!
我突然遇到了这种奇怪的行为(我已经比较了版本控制 (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 没有迁移(尚未)。 有人有什么建议吗?
编辑 我已经创建了一个测试应用程序来测试并成为 100%。 我还不知道为什么,但我与以前有相同的关系(价格实体只有 1 个产品参考(即创建重复项))并且我没有重复项...
所以我可以得到我想要的关系,即 1 个价格应该只有 1 个产品参考,但我完全不知道这里发生了什么......
将实体产品的 PurchasePrice Class 中的关系更改为 ICollection 而不是 1 个单一产品 不会 创建一个欺骗(并创建一个 PurchasePriceProduct table).
从数据库日志 (log4net) 看来,由于关系,EF 首先为产品的 PurchasePrice 参考插入产品(NULL),然后插入产品(NOT NULL)及其参考...(如果有人需要对此进行任何澄清,请告诉我我会尽力而为)
这个post