我相信我的EF codefirst设置中存在一些错误。 所以我有两个想法:
public class Product
{
public int Id { get; set; }
public string Name { get; set; }
public virtual ProductList ProductList { get; set; }
}
和
public class ProductList
{
public ProductList()
{
this.Products = new List<Product>();
}
public int Id { get; set; }
public string Title { get; set; }
public virtual ICollection<Product> Products { get; set; }
}
和上下文
public class ApplicationDbContext :
{
public DbSet<ProductList> ProductLists { get; set; }
public DbSet<Product> Products { get; set; }
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<ProductList>().HasMany(p => p.Products).WithRequired(p => p.ProductList).WillCascadeOnDelete(true);
}
}
我假设我的数据库中有产品清单。 当我创建产品时,我想做这样的事情:
var productListId = 1;
var product = new Product
{
Name = "New product",
ProductList = db.ProductLists.Find(productListId)
};
db.Products.Add(product);
db.SaveChanges();
我期待在表格中插入新行
Id Name ProductList_Id
1 New Product 1
但是,EF会创建新的ProductList,其值与我尝试链接的值相同,保存并将我的产品链接到这个新的ProductList。
答案 0 :(得分:0)
要获得所需的行为,您的Product实体应包含ProductListID
作为链接到ProductList实体的一对多外键。