복붙노트

[SQL] 엔티티 프레임 워크에서 예외가 발생합니다 - 잘못된 개체 이름 'dbo.BaseCs'

SQL

엔티티 프레임 워크에서 예외가 발생합니다 - 잘못된 개체 이름 'dbo.BaseCs'

여기 아담의 답변을 따랐다하고 엔티티 프레임 워크는 이제 작동하며 종자 () 메서드는 작동합니다.

하지만이 같은 데이터베이스에 액세스하려고 할 때 :

    public User FindUserByID(int id)
    {
        return (from item in this.Users
                where item.ID == id
                select item).SingleOrDefault();
    }
  .............................................................................
    // GET: /Main/

    public ActionResult Index(int? id)
    {
        var db = UserDataBaseDB.Create();

        if (!id.HasValue)
            id = 0;

        return View(db.FindUserByID(id.Value));
    }

그것은 진술 this.Users의 항목에서 리턴 (에서 예외가 발생합니다 : 예외 정보 : System.Data.SqlClient.SqlException : 잘못된 개체 이름 'dbo.BaseCs'.

나는 그것을 교체 시도했다 : 창 this.Users.ElementAt (ID); 그러나 다음이 예외가 발생합니다.

엔티티 LINQ 메소드를 인식하지 못하는 'MySiteCreator.Models.User ElementAt는 [사용자 (System.Linq.IQueryable1 [MySiteCreator.Models.User, INT32)'에있어서,이 방법은 저장 expression.` 변환 할 수없는

캔 사람의 도움 나? 감사합니다!

해결법

  1. ==============================

    1.EF는 데이터베이스에 존재하지 않는 개체 (가장 가능성이 테이블)라는 이름의 dbo.BaseCs를 사용하는 SQL 문으로 LINQ를 번역되는이 오류는 수단.

    EF는 데이터베이스에 존재하지 않는 개체 (가장 가능성이 테이블)라는 이름의 dbo.BaseCs를 사용하는 SQL 문으로 LINQ를 번역되는이 오류는 수단.

    데이터베이스를 확인하고 해당 테이블의 존재 여부를 확인하거나, 다른 테이블 이름을 사용해야한다고. 당신은 다음과 같습니다 튜토리얼에 대한 링크를 게시 할 수있는 경우에도, 당신이 무엇을하고 있는지 함께 따라 도움이 될 것이다.

  2. ==============================

    2.그것은 가능성이 가장 높은 모델 클래스의 이름과 '표류'에서 언급 한 바와 같이 테이블 이름 사이의 불일치이다. 이 같은를 만들거나 당신이 (내가 OAuthMembership 위해 한 것을) 테이블 이름에서 모델 클래스 이름의 다른 유지하고자 할 때 아래의 예를 사용합니다. 모델 클래스 이름은 테이블 이름 반면 OAuthMembership 것을 참고 webpages_OAuthMembership입니다.

    그것은 가능성이 가장 높은 모델 클래스의 이름과 '표류'에서 언급 한 바와 같이 테이블 이름 사이의 불일치이다. 이 같은를 만들거나 당신이 (내가 OAuthMembership 위해 한 것을) 테이블 이름에서 모델 클래스 이름의 다른 유지하고자 할 때 아래의 예를 사용합니다. 모델 클래스 이름은 테이블 이름 반면 OAuthMembership 것을 참고 webpages_OAuthMembership입니다.

    어느 모델에 테이블 속성을 제공합니다 :

    [Table("webpages_OAuthMembership")]
    public class OAuthMembership
    

    또는 DBContext OnModelCreating를 재정 의하여 매핑을 제공 :

    class webpages_OAuthMembershipEntities : DbContext
    {
        protected override void OnModelCreating( DbModelBuilder modelBuilder )
        {
            var config = modelBuilder.Entity<OAuthMembership>();
            config.ToTable( "webpages_OAuthMembership" );            
        }
        public DbSet<OAuthMembership> OAuthMemberships { get; set; }        
    }
    
  3. ==============================

    3.이 같은 매핑을 제공하는 경우 :

    이 같은 매핑을 제공하는 경우 :

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            modelBuilder.Configurations.Add(new ClassificationMap());
            modelBuilder.Configurations.Add(new CompanyMap());
            modelBuilder.Configurations.Add(new GroupMap());
            ....  
        }
    

    BaseCs에 대한지도를 추가해야합니다.

    가없는 경우 컴파일 오류가 발생하지 않습니다. 당신이 개체를 사용할 때 당신은 런타임 오류가 발생합니다.

  4. ==============================

    4.그것은 나에게 테이블 이름의 복수화에 대한 문제가 있습니다. 당신은 아래 니펫을 사용하여이 규칙을 해제 할 수 있습니다.

    그것은 나에게 테이블 이름의 복수화에 대한 문제가 있습니다. 당신은 아래 니펫을 사용하여이 규칙을 해제 할 수 있습니다.

     protected override void OnModelCreating(DbModelBuilder modelBuilder)
     {
         base.OnModelCreating(modelBuilder);
         modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
     }
    
  5. ==============================

    5.EF는 dbo.BaseCs라는 이름의 테이블을 찾고있다. 문제를 복수화 엔티티 이름이 될 수 있습니다. 이 링크를 확인하세요.

    EF는 dbo.BaseCs라는 이름의 테이블을 찾고있다. 문제를 복수화 엔티티 이름이 될 수 있습니다. 이 링크를 확인하세요.

    편집 : 업데이트 링크.

  6. ==============================

    6.모든 것이 당신의 ConnectionString에 당신의 DB 컨텍스트 파일을 당신의 DbSet 모음 이름을 확인 괜찮 인 경우. 있고 데이터베이스 테이블 이름이 일치하지 않는 경우에도이 오류가 발생합니다.

    모든 것이 당신의 ConnectionString에 당신의 DB 컨텍스트 파일을 당신의 DbSet 모음 이름을 확인 괜찮 인 경우. 있고 데이터베이스 테이블 이름이 일치하지 않는 경우에도이 오류가 발생합니다.

    따라서, 예를 들어, 카테고리, 제품

    public class ProductContext : DbContext 
    { 
        public DbSet<Category> Categories { get; set; } 
        public DbSet<Product> Products { get; set; } 
    }
    

    실제 데이터베이스 테이블 이름과 일치해야합니다 :

  7. ==============================

    7.당신은 스키마와 두 개의 서로 다른 장소에서 테이블을 모두 정의해야합니다.

    당신은 스키마와 두 개의 서로 다른 장소에서 테이블을 모두 정의해야합니다.

    상황에 맞는 스키마를 정의한다

    public class BContext : DbContext
    {
        public BContext(DbContextOptions<BContext> options) : base(options)
        {
        }
    
        public DbSet<PriorityOverride> PriorityOverrides { get; set; }
    
        protected override void OnModelCreating(ModelBuilder builder)
        {
            builder.HasDefaultSchema("My.Schema");
    
            builder.ApplyConfiguration(new OverrideConfiguration());
        }
    }
    

    각 테이블에 대한

    class PriorityOverrideConfiguration : IEntityTypeConfiguration<PriorityOverride>
    {
        public void Configure(EntityTypeBuilder<PriorityOverride> builder)
        {
            builder.ToTable("PriorityOverrides");
            ...
        }
    }
    
  8. ==============================

    8.대신에

    대신에

    modelBuilder.Entity<BaseCs>().ToTable("dbo.BaseCs");
    

    시험:

    modelBuilder.Entity<BaseCs>().ToTable("BaseCs");
    

    테이블 이름은 dbo.BaseCs 경우에도

  9. ==============================

    9.그것은 가치가 무엇인지, 나는 내 경우에는, 문제가 INSERT 트리거 후에서 나오는 것을 언급하고 싶었다!

    그것은 가치가 무엇인지, 나는 내 경우에는, 문제가 INSERT 트리거 후에서 나오는 것을 언급하고 싶었다!

    당신이 잠시 동안 검색 될 수 있도록이 슈퍼 볼 수 없습니다!

  10. ==============================

    10.경우에 해당하는지 모르겠지만,

    경우에 해당하는지 모르겠지만,

    당신은 일반적으로 단수 형태 나 우리가 복수 형태를 사용하여 DbSet 이름을 규칙에 따라, 모델의 이름이됩니다 DbSet 당신의 SQL 테이블을 추가하기 전에 마이그레이션을 만드는 경우.

    그래서 DbSet의 이름이 표와 동일한 이름이 있는지 확인하려고합니다. 하지 않으면 것은 ALTER 구성하려고합니다.

  11. ==============================

    11.컨텍스트 정의에서, 문맥 클래스 당이 DbSet 컨텍스트를 정의합니다.

    컨텍스트 정의에서, 문맥 클래스 당이 DbSet 컨텍스트를 정의합니다.

  12. from https://stackoverflow.com/questions/7784064/entity-framework-throws-exception-invalid-object-name-dbo-basecs by cc-by-sa and MIT license