很抱歉这个“模糊”的问题,但我不知道如何让它更清楚。
问题如下:我有一张带有
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
应该可用
在你的文件中更改类
public PaymentMethods? PaymentMethod { get; set; }
到
public EhloPaymentMethods? PaymentMethod { get; set; }