如何访问实体框架自动生成的外键? (添加关联数据)

How to access automatically generated Foreign Key by entity framwork? (Add linked data)

我正在使用实体框架制作一个 MVC 网站。 我使用的是代码优先方法,所以我通过代码创建了我的数据库。

我有一个包含 3 tables 的数据库:

tblTtypes (1-*) tblRestaurants (1-*) tblRecensies

我的tblRestaurants模型是这样的:

[Table("tblTypes")]
  public class Types
  {
    [Key]
    public int PK_TypeNr { get; set; }
    [Required]
    public string TypeKeuken { get; set; }
    [Required]
    public string TypeZaak { get; set; }
    [Required]
    public bool Vegetarisch { get; set; }

    public List<Restaurants> Restaurants { get; set; }
  }

列表 List<Restaurants> Restaurants 是另一个 table 的 link (实体框架会自动注意到并添加 FK)

RestaurantController 看起来像:

[HttpPost]
        [ValidateAntiForgeryToken]
        public ActionResult Create([Bind(Include = "PK_RestaurantNr,RestaurantNaam,Adres,Website,Aantal_Beoordelingen")] Restaurants restaurants)
        {
            if (ModelState.IsValid)
            {
                db.Restaurants.Add(restaurants);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(restaurants);
        }

模型 Restaurants 看起来像:

  [Table("tblRestaurants")]
  public class Restaurants
  {
    [Key]
    public int PK_RestaurantNr      { get; set; }
    [Required]
    public string RestaurantNaam    { get; set; }
    [Required]
    public string Adres             { get; set; }
    public string Website           { get; set; }
    [Required]
    public int Aantal_Beoordelingen { get; set; }

    public List<Recensies> Recensies { get; set; }
  }

我这样添加了我的数据:

Restaurants rest5 = new Restaurants()
      {
        PK_RestaurantNr = 5,
        RestaurantNaam = "Terra",
        Adres = "Frederik Lintstraat 5, Leuven, België",
        Website = "http://www.terra-leuven.be/",
        Aantal_Beoordelingen = 4
      };

      t1.Restaurants = new List<Restaurants>();
      t1.Restaurants.Add(rest5);

我的观点是自动创建的。

问题:当我想添加一个新的 Restaurant 时,我还想将它 link 添加到一个 Type。但是如何访问自动生成的外键(由实体框架生成)?

您需要将其放入 Restaurants class 中才能进行设置。你应该输入这样的内容:

[ForeignKey("RestaurantType")]
public int TypesID { get; set; }

public virtual Types RestaurantType { get; set; }

之后,您需要做的就是将TypesID设置为您要使用的Type的ID,并保存。从那时起,RestaurantType 属性 将被填充,并且您将 Restaurant 链接到您想要的 Types 记录。

最后一件事要注意,您 必须设置 TypesID 而不是导航 属性。如果您设置导航 属性,您会发现自己在创建重复项。我已经写了一篇关于 here 的博客 post。