无法先使用实体框架代码将其他指定列设置为表的主键,而不是Id列

本文关键字:设置 Id 实体 框架 其他 代码 | 更新日期: 2023-09-27 18:20:57

我有两张表ProductOrder

public class Product
{
 string name;
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid  productId { get; set; } // i want this to be primary key instead default Id
}
public class Order
{
 string name;
 [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Key]
public Guid  orderId { get; set; } // i want this to be primary key instead default Id and also want to add productId inside this table as foreign key
}

我使用了以下代码来首先使用代码。

DatabaseContext.cs

  class DatabaseContext : DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Order> Orders { get; set; }
    }

程序.cs

 static void Main(string[] args)
        {
            Database.SetInitializer(new DropCreateDatabaseAlways<DatabaseContext>());
            using (var context = new DatabaseContext())
            {
                context.Product.Add(new Product() {  Name = "mytest" });
                context.SaveChanges();
            }
            Console.WriteLine("Database Created!!!");
            Console.ReadKey();
        }

获取异常

Additional information: Unable to determine composite primary key ordering for type '.Customer'. Use the ColumnAttribute (see http://go.microsoft.com/fwlink/?LinkId=386388) or the HasKey method (see http://go.microsoft.com/fwlink/?LinkId=386387) to specify an order for composite primary keys.

无法先使用实体框架代码将其他指定列设置为表的主键,而不是Id列

EF只支持属性,因此您应该将字段更改为属性。当您这样做时,使用{类名}+Id作为属性名称,它将按照约定作为键属性。或者,您可以在属性上使用[Key]属性,让EF知道它应该是关键属性。你可以在这里找到更多关于EF属性的信息。