嗨,我有问题保存一个集合到数据库,这是通过一个外键相关的
这是我的。
public class Product
{
public int ProductId { get; set; }
public string ProductName { get; set; }
public ICollection<Image> Images { get; set; }
}
public class Image
{
public int ImageId { get; set; }
public string ImageName { get; set; }
}
public class TestDbContext : DbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<Image> Images { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
}
}
我想保存图片和产品如下。
using (TestDbContext s = new TestDbContext())
{
Product p = new Product() { ProductName = "test", Images = new List<Image>() {new Image{ ImageName="test"} } };
s.Products.Add(p);
s.SaveChanges();
}
但是,我得到以下错误:
{"Invalid column name 'Product_ProductId'."}
编辑
表结构
CREATE TABLE [dbo].[Image](
[ImageId] [int] IDENTITY(1,1) NOT NULL,
[ImageName] [nvarchar](50) NULL,
CONSTRAINT [PK_Image] PRIMARY KEY CLUSTERED
(
[ImageId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
CREATE TABLE [dbo].[Product](
[ProductId] [int] IDENTITY(1,1) NOT NULL,
[ProductName] [nvarchar](50) NULL,
[ImageId] [int] NULL,
CONSTRAINT [PK_Product] PRIMARY KEY CLUSTERED
(
[ProductId] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO
ALTER TABLE [dbo].[Product] WITH CHECK ADD FOREIGN KEY([ImageId])
REFERENCES [dbo].[Image] ([ImageId])
GO
我做错了什么?
如果您要使用现有的数据库,您需要从Product
类中删除此属性
public ICollection<Image> Images { get; set; }
并在Image
类
public ICollection<Product> Products { get; set; }
然后在OnModelCreating
上添加以下配置。
modelBuilder.Entity<Image>().HasMany(i => i.Products).WithRequired().Map(m => m.MapKey("ImageId"));
,最后这样使用
var i = new Image() { ImageName = "test", Products = new List<Product> { new Product { ProductName = "test" } } };
s.Images.Add(i);
s.SaveChanges();