Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/315.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SqlClient.SqlException:对象名称无效_C#_Entity Framework_Exception_Dbcontext - Fatal编程技术网

C# SqlClient.SqlException:对象名称无效

C# SqlClient.SqlException:对象名称无效,c#,entity-framework,exception,dbcontext,C#,Entity Framework,Exception,Dbcontext,我在尝试保存更改时遇到此异常: System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参见内部异常 --->System.Data.Entity.Core.UpdateException:运行时出错 更新条目。有关详细信息,请参见内部异常 --->System.Data.SqlClient.SqlException:对象名称无效 “dbo.UserCacheModels” 我已经读过很多类似的问题,在大多数

我在尝试保存更改时遇到此异常:

System.Data.Entity.Infrastructure.DbUpdateException:发生错误 在更新条目时。有关详细信息,请参见内部异常

--->System.Data.Entity.Core.UpdateException:运行时出错 更新条目。有关详细信息,请参见内部异常

--->System.Data.SqlClient.SqlException:对象名称无效 “dbo.UserCacheModels”

我已经读过很多类似的问题,在大多数情况下,问题出现在不同步的DB模式和DbContext中。 但我认为我的情况不同,因为我没有这样的实体
UserCacheModel
只是DTO类中的一个,它没有附加到DbContext,当然数据库中也没有这样的表

我的DbContext非常大,因此我将显示简化版本:

public class PhotoContext : DbContext
{
    public PhotoContext(string connectionString)
        : base(connectionString)
    {
        Database.SetInitializer<PhotoContext>(null);
        ((IObjectContextAdapter)this).ObjectContext.CommandTimeout = 180;
    }

    #region DataSets

    public IDbSet<VehicleLog> VehicleLogs { get; set; }
    public IDbSet<ActivityMarker> ActivityMarkers { get; set; }
    public IDbSet<Photo> Photos { get; set; }

    //other datasets, but there is NO IDbSet<UserCacheModel> UserCacheModels

    #endregion

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<VehicleLog>()
            .Property(x => x.UserId)
            .HasColumnName("User_Id");

        modelBuilder.Entity<VehicleLog>()
            .HasRequired(x => x.User)
            .WithMany(x => x.VehicleLogs)
            .HasForeignKey(x => x.UserId);

        modelBuilder.Entity<Photo>()
            .Property(x => x.WorkId)
            .HasColumnName("Work_Id");

        modelBuilder.Entity<Photo>()
            .HasOptional(x => x.Work)
            .WithMany(x => x.Photos)
            .HasForeignKey(x => x.WorkId);

       //other configuration
    }
}
公共类PhotoContext:DbContext
{
公共PhotoContext(字符串连接字符串)
:基本(连接字符串)
{
Database.SetInitializer(null);
((IObjectContextAdapter)this).ObjectContext.CommandTimeout=180;
}
#区域数据集
公共IDbSet VehicleLogs{get;set;}
公共IDbSet活动标记程序{get;set;}
公共设置照片{get;set;}
//其他数据集,但没有IDbSet UserCacheModels
#端区
模型创建时受保护的覆盖无效(DbModelBuilder modelBuilder)
{
modelBuilder.Entity()
.Property(x=>x.UserId)
.HasColumnName(“用户Id”);
modelBuilder.Entity()
.HasRequired(x=>x.User)
.具有多个(x=>x.VehicleLogs)
.HasForeignKey(x=>x.UserId);
modelBuilder.Entity()
.Property(x=>x.WorkId)
.HasColumnName(“工作Id”);
modelBuilder.Entity()
.has可选(x=>x.Work)
.有很多(x=>x张照片)
.HasForeignKey(x=>x.WorkId);
//其他配置
}
}

有什么想法吗?

请附上一份。至少包括您正在使用的
DbContext
实现(即您的代码)。
UserCacheModel
是否在
Photo
等实体中作为属性/关系引用?如何/在何处使用
UserCacheModel
UserCacheModel?+1可能作为一个或多个实体中的属性引用。如果是,则将.Ignore(x=>x.UserCache)(假设UserCache是属性名)添加到可能有引用的任何实体中。不过最好删除引用并将其保留在viewmodels/DTO中,并保持实体的纯净。忽略属性可能会造成麻烦,因为它们会潜入Linq表达式,导致运行时失败。如果这是EF6,则可以通过多种方式将该类标识为“实体”(Having
DbSet
只是其中之一)。例如,您的
UserCacheModel
是否源自
UserCache
实体并位于同一程序集中?在这种情况下,EF6将发现它并自动将其映射为“实体”,您会感到非常惊讶。另一种方法是@StevePy@StevePy@Ivan Stoev提到的其他实体中的公共引用/集合属性。很抱歉,我刚刚发现我的一个实体包含两个
UserCacheModel
类型的属性,但在DbContext中只有一个被忽略。所以我相信这就是原因。谢谢。如果您创建了一个答案,我将对其进行投票并将其标记为已接受。