如何使用实体框架从另一个类返回 ID 或全部
本文关键字:返回 ID 全部 另一个 何使用 实体 框架 | 更新日期: 2023-09-27 17:56:40
我学习实体框架,所以如果这对你来说很容易,请不要怪我
我有班级主页号码.cs
[ScaffoldColumn(false)]
[Key]
public int HomeNumberId { get; set; }
//[ForeignKey("HomeNumberId")]
//public virtual HomeNumber HomeNumbers { get; set; }
[Required(ErrorMessage = "Polje kućni broj je obavezno!")]
public string HomeNumberName { get; set; }
[Required(ErrorMessage = "Polje pod broj/slovo je obavezno!")]
public string HomeSubNumber { get; set; }
public int StreetId { get; set; }
[ForeignKey("StreetId")]
public virtual Street Street { get; set; }
....
public bool AddHomeNumber(string homeNumberName, string homeSubNumber, Street street)
{
HomeNumber number = new HomeNumber();
number.HomeNumberName = homeNumberName;
number.HomeSubNumber = homeSubNumber;
number.StreetId = street.StreetId;
using (var _db = new DataContext())
{
// Dodaj HomeNumber u bazu [AD_HOMENUMBER]
_db.DB_HomeNumber.Add(number);
_db.SaveChanges();
}
// Success.
return true;
}
还有阶级街.cs
[ScaffoldColumn(false)]
[Key]
public int StreetId { get; set; }
[Required(ErrorMessage = "Polje naziv ulice je obavezno!")]
public string StreetName { get; set; }
.....
public bool AddStreet(string streetName)
{
Street street = new Street();
street.StreetName = streetName;
using (var _db = new DataContext())
{
// Dodaj Street u bazu [AD_STREET]
_db.DB_Street.Add(street);
_db.SaveChanges();
}
// Success.
return true;
}
我的代码是:
Street st = new Street();
st.AddStreet(ucAddress.Street.Text);
HomeNumber hou = new HomeNumber();
hou.AddHomeNumber(ucAddress.HouseNumber.Text, ucAddress.HouseSubNumber.Text, st.StreetId);
我需要在我的后面的代码中带有值的 st.streetId,...我不知道我错过了什么,...因为在AddHomeNumber我打电话给街道。StreetId 其中 st.streetId 的返回值
我认为你想在AddStreet
上做的事情看起来像这样。保存Street
并返回结果。
public Street AddStreet(string streetName)
{
Street street = new Street();
street.StreetName = streetName;
using (var _db = new DataContext())
{
// Dodaj Street u bazu [AD_STREET]
_db.DB_Street.Add(street);
_db.SaveChanges();
}
// Success.
return street;
}
在后面的代码中,您传递了st
而不是st.StreetId
AddHomeNumber
。
Street st = new Street();
st = st.AddStreet(ucAddress.Street.Text); // get the street that has been saved with generated id.
HomeNumber hou = new HomeNumber();
hou.AddHomeNumber(ucAddress.HouseNumber.Text, ucAddress.HouseSubNumber.Text, st);
注意:我建议您查看存储库模式,这将使您的生活更轻松,并且您将编写更具可读性和出色的代码。
对于以相同方式创建存储库的HomeNumber
或其他实体,Street
的基本存储库也将如下所示。
public class StreetRepository
{
private DataContext _db;
public StreetRepository(DataContext dataContext)
{
_db = dataContext;
}
public Street Add(string streetName)
{
Street street = new Street();
street.StreetName = streetName;
using (var _db = new DataContext())
{
// Dodaj Street u bazu [AD_STREET]
_db.DB_Street.Add(street);
_db.SaveChanges();
}
// Success.
return street;
}
public Street Get(int id)
{
return _db.DB_Street.Find(id);
}
// other CRUD methods
}
用法:
StreetRepository streetRepository = new StreetRepository();
HomeNumberRepository homeNumberRepository = new HomeNumberRepository(); // you have to create it yourself
Street st = streetRepository.Add(ucAddress.Street.Text); // get the street that has been saved with generated id.
HomeNumber homeNumber = homeNumberRepository.Add(ucAddress.HouseNumber.Text, ucAddress.HouseSubNumber.Text, st);
注意:您可能会发现为每个实体编写一个存储库很痛苦,这里有帮助通用存储库。
掌握存储库模式后,您可以转到工作单元并发现 EntityFramework 已经拥有它。
Diffrent方法
public int AddStreet(string streetName)
{
Street street = new Street();
street.StreetName = streetName;
using (var _db = new DataContext())
{
// Dodaj Street u bazu [AD_STREET]
_db.DB_Street.Add(street);
_db.SaveChanges();
}
// Success.
return street.StreetId;
}
并在代码隐藏中
int pStreetId = 0;
Street st = new Street();
pStreetId = st.AddStreet(ucAddress.Street.Text);
HomeNumber hou = new HomeNumber();
hou.AddHomeNumber(ucAddress.HouseNumber.Text, ucAddress.HouseSubNumber.Text, pStreetId);
您缺少的是,当您保存id时,id被添加到objct中,仅此而已。