C# EntityFramework一对一或零
我的“ShoppingCart”和“ShoppingCartItems”表已经在我的数据库中。我正在尝试添加一个名为“折扣代码”的新表。每个购物车可以有一个或零个折扣码 我收到的错误是:列名“discountId”无效C# EntityFramework一对一或零,c#,entity-framework,C#,Entity Framework,我的“ShoppingCart”和“ShoppingCartItems”表已经在我的数据库中。我正在尝试添加一个名为“折扣代码”的新表。每个购物车可以有一个或零个折扣码 我收到的错误是:列名“discountId”无效 [Table("ShoppingCarts")] public class ShoppingCart { [Key] [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Ide
[Table("ShoppingCarts")]
public class ShoppingCart
{
[Key]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[Column("cartID")]
public string cartID { get; set; }
public virtual IList<ShoppingCartItem> CartItems { get; set; }
[Column("dateCreated")]
public DateTime? DateCreated { get; set; }
[Column("userID")]
public Guid UserID { get; set; }
public int? discountId { get; set; }
public virtual Discount discount { get; set; }
}
[Table("discountCodes")]
public class Discount
{
public int discountId { get; set; }
public string discountCode{get;set;}
[Required]
public int percentOff { get; set; }
[Required]
public Boolean isActive { get; set; }
public ShoppingCart ShoppingCart { get; set; }
}
public class ShoppingCartContext : DbContext
{
public ShoppingCartContext()
: base("MYDBConnectionString")
{
Database.SetInitializer<ShoppingCartContext>(new CreateDatabaseIfNotExists<ShoppingCartContext>());
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ShoppingCart>().HasKey(t => t.cartID)
.HasOptional(t => t.discount)
.WithOptionalPrincipal(d => d.ShoppingCart)
.Map(t => t.MapKey("cartID"));
modelBuilder.Entity<Discount>().HasKey(t => t.discountId)
.HasOptional(q => q.ShoppingCart);
}
public DbSet<Discount> discountCodes { get; set; }
public DbSet<ShoppingCart> ShoppingCart { get; set; }
public DbSet<ShoppingCartItem> ShoppingCartItems { get; set; }
}
[表(“购物车”)]
公共类购物车
{
[关键]
[DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
[列(“cartID”)]
公共字符串cartID{get;set;}
公共虚拟IList目录项{get;set;}
[列(“日期创建”)]
公共日期时间?DateCreated{get;set;}
[列(“用户ID”)]
公共Guid用户标识{get;set;}
公共int?折扣ID{get;set;}
公共虚拟折扣{get;set;}
}
[表(“折扣代码”)]
公务舱折扣
{
公共整数折扣ID{get;set;}
公共字符串折扣代码{get;set;}
[必需]
公共整数百分比{get;set;}
[必需]
公共布尔isActive{get;set;}
公共购物车购物车{get;set;}
}
公共类ShoppingCartContext:DbContext
{
公共ShoppingCartContext()
:base(“MYDBConnectionString”)
{
SetInitializer(新的CreateDatabaseIfNotExists());
}
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity().HasKey(t=>t.cartID)
.has可选(t=>t.折扣)
.WithOptionalPrincipal(d=>d.ShoppingCart)
.Map(t=>t.MapKey(“cartID”);
modelBuilder.Entity().HasKey(t=>t.discountId)
.has可选(q=>q.ShoppingCart);
}
公共DbSet折扣代码{get;set;}
公共DbSet ShoppingCart{get;set;}
公共数据库集ShoppingCartItems{get;set;}
}
如果您正在处理现有数据库,则必须实现DbMigration
,如下所示:
如果您正处于开发阶段,最简单的方法就是删除数据库。数据库中折扣栏的名称是什么?您没有指定列名,因此它假定名称与属性相同。是的,discountId是标识列。那么数据库表是什么样子的呢?什么时候会出现这个错误?我使用的是代码优先。数据库是从这些类生成的。但是何时收到错误?在尝试插入之后?在初始化期间?