C# 向包含“业务”数据且主键为int类型的表中添加引用数据

C# 向包含“业务”数据且主键为int类型的表中添加引用数据,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,基本上我有一个产品实体 public class Product { public int ID {get; set;} public string Name {get; set;} } 我想创造: UnknownProduct : Product { public UnknownProduct() { ID = -2; Name = Unknown; } } 这里的目标是从业务逻辑轻松创建未知产品。我希望在结果表中包含

基本上我有一个产品实体

public class Product
{
    public int ID {get; set;}
    public string Name {get; set;}
}
我想创造:

UnknownProduct : Product
{
    public UnknownProduct()
    {
        ID = -2;
        Name = Unknown;
    }
}
这里的目标是从业务逻辑轻松创建未知产品。我希望在结果表中包含以下内容:

#Products 
ID | Name
1  | Beer // Referenced X times
2  | Soda // Referenced Y times
-1 | UnknownProduct // Referenced Z times, so only one row has been create !
然而,我知道在前面的代码中,每当我创建一个实例时,就会向表中添加一个新行。实际上,对于ID=-2,我会得到一个Identity Insert表达式,但如果我删除它,每次都会添加一个新行

我做了类似的事情,但是主键是string类型的,因此我可以用显式主键为第一个实例种子,然后用相同的主键实例化以下对象,从而避免重复


在这里,由于PK是int类型的,所以这个列被标记为自动生成的,这确实是我想要的。但是在这个特定的例子中,我希望能够使用UnknownProduct作为参考数据,我可以直接从C进行实例化,而不会在DB中有重复项。你知道我如何做到这一点吗?

@red3nb每当我创建一个实例时,一个新行将被添加到表中,你的确切意思是什么?使用EF,您应该完全控制添加的内容。不要在应用程序中建立对键的依赖关系。只需像其他产品一样将unknown添加为产品,并存储指向它的常量或应用程序设置public const int product_unknown_KEY=1;如果您真的想控制键值,请在种子方法中将IDENTITY\u INSERT设置为OFF。@SteveGreene谢谢,您知道如何在种子方法中将IDENTITY INSERT设置为OFF吗?仔细考虑一下,这是一个问题,因为现在我将不得不部署我的应用程序两次,第一次让seed方法运行并为UnknownProduct提供一些ID,第二次是在我手动在up中查找之后,用这个ID更新您提到的常量。最后,我需要删除这段代码作为我的种子方法。如果有的话,我想要一个更干净的解决方案。我不需要这样做。对种子方法进行编码,以在更新之前检查是否存在!上下文。表格。任何。。。或者您可以使用AddOrUpdate打开IDENTITY_INSERT,这样您就可以知道您关心的值。现在在静态类或web.config中配置一个常量。