c# - 如何使用 Entity Framework 从另一个类返回 ID 或全部?

标签 c# asp.net entity-framework class

我正在学习 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/

相关文章:

c# - .Net Core 解决方案中每个项目的 Automapper 不同配置文件

c# - 如何从 XML 文档读取值以构建组合框?

asp.net - oracleDatareader.ExecuteReader() 不返回任何数据

c# - 使用外键作为主键

c# - 从 WPF UserControl 访问 ResourceDictionary

asp.net - 为什么我的 aspx 页面没有缓存在客户端上?

asp.net - 用户在我的网站上点击确认后如何确认 Paypal express 付款?

c# - 一个或多个实体的 MVC5 验证失败。有关详细信息,请参阅 'EntityValidationErrors' 属性

c# - 在 ASP.NET MVC 5 中将图像添加到数据库

javascript - 具有特定大小的pauseableBuffer?