ASP.NET MVC - 2 个表,第二个表的外键,Guid 存在,下面的列为空

问题描述 投票:0回答:1

很抱歉这个“模糊”的问题,但我不知道如何让它更清楚。

问题如下:我有一张带有

Files
的桌子和另一张带有
PaymentMethods
的桌子。

Files
中,我有一个FK专栏
PaymentMethodID
。当我选择
PaymentMethod
时,ID 按预期整齐地填充在
Files.PaymentMethodID
列中,但
PaymentMethod
仍为空。

我认为我应该能够从

PaymentmentMethods
访问列,如
File.PaymentMethod.PaymentMethod
等。

有什么想法吗?我以前这样做过,但不知何故,这次失败了......一定是我忽略的事情。

实体类:

public class Files
{
     public Guid FileID { get; set; }
     public Guid? PaymentMethodID { get; set; }

     [ForeignKey(nameof(PaymentMethodID))]
     [Display(Name = "Method")]
     public PaymentMethods? PaymentMethod { get; set; }
}

public class PaymentMethods
{
     public Guid PaymentMethodID { get; set; }

     [Display(Name = "Method")]
     [Remote("Duplicate", "PaymentMethods", HttpMethod = "POST", ErrorMessage = "This method already exists.")]
     public string PaymentMethod { get; set; }
}

控制器:

[HttpPost, ActionName("EditPayment")]
[ValidateAntiForgeryToken]
public ActionResult EditPost([Bind("FileID,RowVersion,CreatedBy,CreatedDate," +
    "Paid,PaymentMethodID,PaymentDate")] Files model)
{
    try
    {
        _context.Entry(fileToUpdate).OriginalValues["RowVersion"] = model.RowVersion;

        var method = _context.PaymentMethods.Find(model.PaymentMethodID);

        if (model.PaymentMethodID == null) 
        { 
            fileToUpdate.Paid = false; 
        }
        else 
        { 
            fileToUpdate.Paid = true; 
        }

        fileToUpdate.PaymentMethodID = model.PaymentMethodID;
        fileToUpdate.PaymentMethod = method;             // <- This is just to try if it's solved
        fileToUpdate.PaymentDate = model.PaymentDate;

        _context.SaveChanges();

        return View(fileToUpdate);
    }
    catch (DbUpdateConcurrencyException ex)
    {
        //blabla
    }
    catch (DataException /* dex */)
    {
       //blabla
    }

    return View(fileToUpdate);
}

背景:

protected override void OnModelCreating(ModelBuilder modelBuilder)
{
    base.OnModelCreating(modelBuilder);

    //blabla

    modelBuilder.Entity<CustomerFiles>()
       .HasOne(cf => cf.Customers)
       .WithMany(c => c.Files)
       .OnDelete(DeleteBehavior.Cascade);

    modelBuilder.Entity<CustomerFiles>()
        .HasKey(cf => new { cf.FileID });

    modelBuilder.Entity<CustomerFiles>()
        .Property(cf => cf.RowVersion).IsConcurrencyToken();

    modelBuilder.Entity<PaymentMethods>()
        .HasKey(pm => new { pm.PaymentMethodID });

    modelBuilder.Entity<PaymentMethods>()
        .Property(pm => pm.RowVersion).IsConcurrencyToken();
}

File.PaymentMethod.PaymentMethod
应该可用

asp.net-mvc foreign-keys
1个回答
0
投票

在你的文件中更改类

public PaymentMethods? PaymentMethod { get; set; }

public EhloPaymentMethods? PaymentMethod { get; set; }
© www.soinside.com 2019 - 2024. All rights reserved.