如何通过实体框架访问自动生成的外键? (添加链接数据)

时间:2015-01-06 19:17:16

标签: sql-server asp.net-mvc entity-framework

我正在使用Entity Frameworks创建一个MVC网站。 我正在使用代码第一种方法,所以我通过代码创建了我的数据库。

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

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是指向另一个表的链接(实体框架会自动注意并添加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时,我还想将其链接到Type。但是如何访问自动生成的外键(由实体框架生成)?

1 个答案:

答案 0 :(得分:2)

您需要在Restaurants课程中拥有该课程,以便您能够设置它。你应该输入这样的东西:

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

public virtual Types RestaurantType { get; set; }

之后,您需要做的就是将TypesID设置为您要使用的Type的ID,然后保存。从那时起,RestaurantType属性将被填充,您将Restaurant与您想要的Types记录相关联。

最后要注意的是,必须设置TypesID而不是导航属性。如果设置导航属性,您将发现自己创建重复项。我在here上撰写了一篇博文。