如何使用实体框架从另一个类返回 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 的返回值

如何使用实体框架从另一个类返回 ID 或全部

我认为你想在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中,仅此而已。