C# 如何使用实体框架从另一个类返回ID或all?
我正在学习实体框架,所以如果这对您来说很容易,请不要责怪我 我有班级家庭号码.csC# 如何使用实体框架从另一个类返回ID或all?,c#,asp.net,entity-framework,class,C#,Asp.net,Entity Framework,Class,我正在学习实体框架,所以如果这对您来说很容易,请不要责怪我 我有班级家庭号码.cs [ScaffoldColumn(false)] [Key] public int HomeNumberId { get; set; } //[ForeignKey("HomeNumberId")] //public virtual HomeNumber HomeNumbers { get; set; } [Required(ErrorMessage = "Polj
[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;
}
和class 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中,我调用了street.StreetIdst.StreetId的返回值在哪里st.StreetId我想你想在
AddStreet
上做的事情是这样的。保存街道并返回结果
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
的基本存储库对于homernumber
或以相同方式创建存储库的其他实体也是如此
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已经拥有它。不同的方法
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);
您缺少的是在保存objct时将id添加到objct中,仅此而已。非常感谢您提供此信息!您完全帮助了我:)并感谢您提供有关存储库模式的信息。