C# 实体框架代码优先-违反主键约束

C# 实体框架代码优先-违反主键约束,c#,asp.net-mvc,entity-framework,tsql,ef-code-first,C#,Asp.net Mvc,Entity Framework,Tsql,Ef Code First,我有一个采用代码优先实体框架方法的ASP.NET应用程序。在我的一个型号(产品)中,我有以下代码: [Key] public int Id { get; set; } public string Name { get; set; } public string Description { get; set; } public Guid OwnerId { get; set; } public DateTime AddedDate { get; set; } public bool IsConfi

我有一个采用代码优先实体框架方法的ASP.NET应用程序。在我的一个型号(产品)中,我有以下代码:

[Key]
public int Id { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public Guid OwnerId { get; set; }
public DateTime AddedDate { get; set; }
public bool IsConfirmet { get; set; }

[ForeignKey("OwnerId")]
public virtual Owner Owner { get; set; }
所有者类如下所示:

[Key]
public Guid UserId { get; set; }
[Required]
public string Name { get; set; }
[Required]
public string Address { get; set; }

[NotMapped]
public string Login { get; set; }
[NotMapped]
public string Password { get; set; }
稍后,当我尝试添加产品时:

public static int AddProduct(Product product)
{
    db.Products.Add(product);
    db.SaveChanges();
}
我得到一个信息:

违反主键约束“PK_dbo.owner”。无法在对象“dbo.owner”中插入重复的密钥。重复的键值为([…])。声明已终止

我在尝试删除产品时也会收到此消息

public static void RemoveProducts()
{
    List<Product> products = db.Products.Where(p => p.IsConfirmed == false).ToList();

    foreach (Product product in products)
    {
        if ((DateTime.Now - product.AddedDate).TotalMinutes > 10)
        {
            db.Products.Remove(product);
            db.SaveChanges();
        }
    }
}
publicstaticvoidremoveProducts()
{
List products=db.products.Where(p=>p.IsConfirmed==false).ToList();
foreach(产品中的产品)
{
如果((DateTime.Now-product.addedate).TotalMinutes>10)
{
db.Products.Remove(产品);
db.SaveChanges();
}
}
}

此错误发生在db.SaveChanges()行。这对我来说很奇怪,因为我认为它涉及到添加操作。

uniqueidentifier
表示数据类型
Guid
,而不是
唯一键
,当然你是对的。我不知道我怎么会忘记那件事。我要重写我的问题,因为我在将产品添加到数据库时遇到问题,我不知道为什么。在调用
AddProduct
之前,您是否为您的
产品指定了正确的
所有者
?是的。这是一个正确的所有者ID。有一个区别——数据库Guid是用大写字母编写的,而C#中有小写字母。但第一个产品已正确添加,因此不会出现问题。错误消息表示有人试图在Owners表中插入记录。您显示的代码正在添加产品。我的意思是检查该产品的所有者属性-看起来EF认为它是一个新的所有者实体。这是一对多关系吗?