在虚拟属性上添加条目

时间:2015-11-30 10:50:30

标签: asp.net-mvc entity-framework

我是asp.net&的新手。 mvc实体框架。 我正在为管理应用程序做一个后勤工作

这是我的App类:

 public class AsyApp
{
    [Key]
    public int AsyAppId { get; set; }

    [StringLength(255)]
    [Required]
    [DisplayName("Nom")]
    public string Name { get; set; }

    [StringLength(255)]
    [Required]
    [RegularExpression(@"com\.[a-zA-Z0-9]+\.[a-zA-Z0-9]+", ErrorMessage = "Le Bundle n'est pas de la bonne forme (ex: com.Company.AppName)")]
    public string Bundle { get; set; }

    public virtual Theme Theme { get; set; }
    public virtual AppIdentity AppIdentity { get; set; }

    public virtual ICollection<Scene> Scenes { get; set; }

    public virtual ICollection<FilePath> FilePaths { get; set; }
}

该应用附有AppIdentity:

public class AppIdentity
{


    [DisplayName("Ecran d'accueil")]
    public virtual FilePath Splashscreen { get; set; }

    [DisplayName("Icon")]
    public virtual FilePath Icon { get; set; }

    [DisplayName("Logo Application")]
    public virtual FilePath LogoApp { get; set; }

    [DisplayName("Logo Client")]
    public virtual FilePath LogoClient { get; set; }

    [Key, ForeignKey("AsyApp")]
    public int AsyAppId { get; set; }

    public virtual AsyApp AsyApp { get; set; }

}

这是我的dbcontext

public class ApplicationDbContext : IdentityDbContext<ApplicationUser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {
    }

    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }

    public DbSet<AsyApp> AsyApps { get; set; }

    public DbSet<Theme> Themes { get; set; }

    public DbSet<Scene> Scenes { get; set; }

    public DbSet<AppIdentity> AppIdentities { get; set; }

    public DbSet<FilePath> FilePaths { get; set; }
}

我有一个视图,我编辑应用程序的AppIdentity。 我想更新例如Splashscreen属性。

我期望的行为是当我做

appIdentity.Splashscreen = new FilePath();

它在FilePaths dbset上添加一个条目; 将新文件路径条目的AsyAppId设置为当前的AsyApp。 但它没有用......

这是我的控制器

[HttpPost]
    [ValidateAntiForgeryToken]
      public ActionResult Edit(AppIdentity appIdentity)
    {

        var f = new FilePath();
        f.AsyAppId = appIdentity.AsyAppId;
        db.FilePaths.Add(f);
        db.SaveChanges();
        appIdentity.Splashscreen = f;
        db.SaveChanges();
        return RedirectToAction("Edit", "AppIdentity", new { asyAppId = appIdentity.AsyAppId });}}

任何帮助?

提前谢谢,这对我很有帮助。 我只是不完全了解虚拟属性的工作原理

1 个答案:

答案 0 :(得分:0)

尝试将此代码放在appIdentity.Splashscreen = f;之后:

        db.AppIdentities.Attach(appIdentity);
        context.Entry(appIdentity).State = EntityState.Modified;
        db.SaveChanges();