如何访问实体框架自动生成的外键? (添加关联数据)
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。
我正在使用实体框架制作一个 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。