2015-06-17 18 views
2

我學習實體框架,所以不要怪我,如果這很容易讓你如何使用實體框架返回ID或其他類的所有ID?

我有類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我打電話street.StreetId其中是日返回值。 streetId

回答

2

我想你想對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; 
} 

在後面的代碼,你必須通過stst.StreetIdAddHomeNumber

注:我建議你採取庫模式一看,會讓你的生活更輕鬆,你會寫更具可讀性和真棒代碼。


Street一個基本庫看起來像這也爲HomeNumber或其他實體創建以同樣的方式。

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已經擁有了它。

+0

非常感謝您提供這方面的信息!你完全幫助我:) 並感謝您提供有關版本庫模式的信息。 – GalaxMan

0

指出錯誤做法

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添加,當你將其保存到objct,僅此而已。

相關問題