【问题标题】:Entinty Framework saving context with null fields mvc5实体框架保存带有空字段 mvc 5 的上下文
【发布时间】:2016-07-19 06:50:44
【问题描述】:

这是对象图片

public int Id { get; }           //primary key
public string Path { get; set; } //not null
public string Name { get; set; } //not null
public string Url { get; set; }  //allows null
public string SecureUrl { get; set; } //allows null

EFDbImageRepository

public void UploadToCloud(Image image)
{
    System.Diagnostics.Debug.WriteLine(image.Id);
    if(image.Id == 0)
    {
        context.Images.Add(image);
    }else
    {
        Image dbEntry = context.Images.Find(image.Id);
    }
    context.SaveChanges();
}

在 UploadImage 操作中的控制器中

 ...   
 Image image = new Image();
 image.init(path, "defaultName1", "type");
 imageRepository.UploadToCloud(image);
 ...

目前 UploadToCloud 我有一个例外: 'System.Data.Entity.ModelConfiguration.ModelValidationException' in EntityFramework.dll

似乎数据有问题,我尝试保存,但我不明白出了什么问题。此时我只初始化 2 个字段路径和名称。 Id 应该自动设置,Url 和 SecureUrl 允许为空,所以一切都应该是好的。

如何将对象保存到数据库中?

【问题讨论】:

  • 在 public int Id { get; 上方添加 [Key] 属性} 并尝试
  • 您必须查看 ValidationExceptions 集合以了解问题所在。请参阅stackoverflow.com/questions/27777004/… 怎么做,
  • 此外,您的更新代码不起作用。将实体分配给dbEntry 不会导致它更新。请再次阅读有关如何更新实体的教程。

标签: asp.net-mvc entity-framework


【解决方案1】:

您将Id 字段设为只读。实体框架会忽略只读属性,因此您现在创建了一个没有主键的实体。你至少要加private set,但为什么没有普通(公开){get;set;}?。

【讨论】:

    猜你喜欢
    • 2019-02-17
    • 2014-12-27
    • 2014-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-15
    • 1970-01-01
    相关资源
    最近更新 更多