gpt4 book ai didi

asp.net-mvc - MVC3 DbContext 保存后获取新模型的 ID?

转载 作者:行者123 更新时间:2023-12-03 03:00:20 25 4
gpt4 key购买 nike

我有一个与模型 Product_Tag 具有 1:n 关系的模型产品。我还有一个模型标签与 Product_Tag 具有 1:n 关系。

class Product{
int ID {get;set;}
public virtual ICollection<Product_Tag> productTag {get;set;}
}

class Tag {
int ID {get;set;}
public virtual ICollection<Product_Tag> productTag {get;set;}

}

class Product_Tag {
int ID {get;set;}
int ProductID{get;set;}
int TagID {get;set;}
public virtual Product product {get;set;}
public virtual Tag tag {get;set;}
}

保存新产品时,我希望能够保存与 Product_Tags 中标签的任何关联。 Product_Tag 需要一个 PROoductID 和一个 TagID。我在保存时可以使用 TagID,但 ProductID 将来自新创建的产品。保存新产品后如何立即获取新创建的产品ID?

或者,有没有办法只保存产品模型,其产品标签只有 TagID,并让 DbContext 为我填写 ProductID?

最佳答案

当您向数据库添加新实体时, Entity Framework 将自动填充其 ID。你可以使用它。

using (var context = new MyDbContext())
{
var product = new Product();
product.Name = "My product";

context.Products.Add(product);
context.SubmitChanges();

var productId = product.ID; // here you can get ID of added product
}

此外,EF 可以处理“多对多”关系,并且您不需要为关系本身创建额外的类。如果您首先使用代码,则可以使用此映射:

public class Product
{
int ID {get;set;}
public virtual ICollection<Tag> Tags {get;set;}
}

public class Tag
{
int ID {get;set;}
public virtual ICollection<Product> Products {get;set;}
}

// In your DbContext class:
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Product>().HasMany(x => x.Tags).WithMany(x => x.Products)
.Map(m =>
{
m.ToTable("Product_Tag"); // Relationship table name
m.MapLeftKey("ProductID"); // Name of column for product IDs
m.MapRightKey("TagID"); // Name of column for tag IDs
});
}

然后,你可以这样做:

using (var context = new MyDbContext())
{
var product = new Product();
product.Name = "My product";
product.Tags.Add(new Tag {Name = "furniture"});
product.Tags.Add(new Tag {Name = "food"});

context.Products.Add(product);
context.SubmitChanges();
}

在本例中,EF 自动创建一个新产品、两个标签以及创建的产品和标签之间的两个关系。

关于asp.net-mvc - MVC3 DbContext 保存后获取新模型的 ID?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9960201/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com