我正在学习 Entity Framework ,所以如果这对你来说很容易,请不要责怪我
我有类(class)HomeNumber.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;
}
以及 Street.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 中我调用 < strong>street.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;
}
在后面的代码中,您在 AddHomeNumber
中传递了 st
而不是 st.StreetId
。
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);
注意:我建议您看看存储库模式,这将使您的生活更轻松,并且您将编写出更具可读性和更出色的代码。
Street
的基本存储库对于 HomeNumber
或您以相同方式创建存储库的其他实体来说也将是这样的。 p>
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);
注意:您可能会发现为每个实体编写一个存储库很痛苦,这里有帮助通用存储库 em>.
掌握存储库模式后,您可以转到工作单元并发现EntityFramework已经拥有它。
关于c# - 如何使用 Entity Framework 从另一个类返回 ID 或全部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30891375/