【问题标题】:Insert fk at the same time as attributes are added在添加属性的同时插入 fk
【发布时间】:2017-03-15 14:21:11
【问题描述】:

所以我希望改进我的代码。我目前有两个模型和两个连接 fk 和 pk 的表。

我想在我的两个表中插入新属性,但在同一时刻,我想在名为USERS 的数据库中设置 fk。

目前我找不到除此之外的其他方法:

using (db)
{
    var encryptedPassword = PasswordStorage.CreateHash(model.Users.PASSWORD);
    var user = db.USERS.Create();
    user.EMAIL = model.Users.EMAIL;
    user.PASSWORD = encryptedPassword;
    user.NAME = model.Users.NAME;
    db.USERS.Add(user);

    var place = db.PLACES.Create();
    place.CITY = model.Places.CITY;
    place.PLACE_NAME = model.Places.PLACE_NAME;
    place.POSTAL = model.Places.POSTAL;
    place.STREET = model.Places.STREET;
    place.STREET_NO = model.Places.STREET_NO;
    db.PLACES.Add(place);

    db.SaveChanges();

    var placesId = db.USERS.Where(u => u.EMAIL == model.Users.EMAIL).Select(u => u.PLACES_ID).Single();
    placesId = db.PLACES.Where(u => u.PLACE_NAME == model.Places.PLACE_NAME).Select(u => u.id).Single();
    db.SaveChanges();
}

所以在第一个db.SaveChanges(); 之后,我进入并设置了我的外部约束,我再次保存了我的更改。对我来说,这似乎非常违反直觉,因此我问你,因为我相信有一个更聪明的方法去做这个?

【问题讨论】:

  • 你可以展示模型吗?
  • 抱歉,我看不懂你的代码。第二个 SaveChanges 应该做什么?在第一次 SaveChanges 之后,您读取了 placesId,然后覆盖它(之前不使用它),然后您不使用 placesId(所以您只是在浪费时间)。最后,您调用第二个 SaveChanges (因为没有任何改变,所以什么都不做)。我错过了什么?

标签: asp.net-mvc entity-framework linq ef-code-first


【解决方案1】:

你需要Code First Migrations,即System.Data.Entity.Migrations;

namespace MigrationsDemo.Migrations
    {
    using System;
    using System.Data.Entity.Migrations;

    public partial class AddFK : DbMigration
    {
        public override void Up()
        {
            AddFK(..);
        }

        public override void Down()
        {
            RemoveFK(..);
        }
    }
}

【讨论】:

    【解决方案2】:

    因为它看起来像one to one 关系,所以我假设你必须在place 模型中拥有USERS User,所以你可以试试这个

       var encryptedPassword = PasswordStorage.CreateHash(model.Users.PASSWORD);
        var user = db.USERS.Create();
        user.EMAIL = model.Users.EMAIL;
        user.PASSWORD = encryptedPassword;
        user.NAME = model.Users.NAME;
    
        var place = db.PLACES.Create();
        place.CITY = model.Places.CITY;
        place.PLACE_NAME = model.Places.PLACE_NAME;
        place.POSTAL = model.Places.POSTAL;
        place.STREET = model.Places.STREET;
        place.STREET_NO = model.Places.STREET_NO;
        place.User=user;
        db.PLACES.Add(place);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-16
      • 2018-06-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-24
      相关资源
      最近更新 更多