Ошибка Nhibernate «Неверное имя столбца», когда столбец существует - PullRequest
5 голосов
/ 09 августа 2011

Привет, у меня есть объект с именем document и один с именем user

Документ

    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual User User { get; set; }

Documentmap

    public DocumentMap()
    {
        Map(x => x.Name);
        Map(x => x.Description);
        References(x => x.User);
    }

Пользователь

    public virtual string UserId { get; set; }
    public virtual string FirstName { get; set; }
    public virtual string MiddleInitial { get; set; }
    public virtual string LastName { get; set; }
    private readonly IList<Document> _documents = new List<Document>();
    public virtual IEnumerable<Document> Documents { get { return _documents; } }
    public virtual void Remove(Document document)
    {
        _documents.Remove(document);
    }
    public virtual void Add(Document document)
    {
        if (!document.IsNew() && _documents.Contains(document)) return;
        _documents.Add(document);
    }

    Map(x => x.UserId);
        Map(x => x.FirstName);
        Map(x => x.MiddleInitial);
        Map(x => x.LastName);
        HasMany(x => x.Documents).Access.CamelCaseField(Prefix.Underscore); 

Довольно просто (они наследуются от базового класса такими вещами, как созданная дата, измененная дата и т. Д.)

когда я пытаюсь получить все документы по идентификатору пользователя, я получаю это

Неверное имя столбца 'UserId'.

столбец наиболее определенно находится в таблице. В нем также перечислены несколько предметов базового класса, которых там нет.

Я беру sql и пропускаю его в диспетчере запросов, и я получаю intellisense, говоря, что они являются недопустимыми столбцами. Я запускаю его, и он работает просто отлично. Более того, существует множество других объектов, использующих эти базовые классы без проблем.

Я пробовал разные вещи, такие как явное отображение имени ключа, имени столбца с помощью инверсии и т. Д., Но безрезультатно. Не знаю, что делать. Спасибо, Раифа

// РЕДАКТИРОВАТЬ согласно запросу, извините, это так многословно. база данных создана nhibernate создать схему

Документ

public class Document : Entity
{
    public virtual string Name { get; set; }
    public virtual string Description { get; set; }
    public virtual DocumentCategory DocumentCategory { get; set; }
    [ValueOf(typeof(DocumentFileType))]
    public virtual string FileType { get; set; }
    public virtual string FileUrl { get; set; }
    public virtual int? Pages { get; set; }
    public virtual decimal? Size { get; set; }
    public virtual User User { get; set; }
}

public class DocumentMap : EntityMap<Document>
{
    public DocumentMap()
    {
        Map(x => x.Name);
        Map(x => x.Description);
        Map(x => x.FileUrl);
        Map(x => x.Pages);
        Map(x => x.Size);
        Map(x => x.FileType);
        References(x => x.DocumentCategory);
        References(x => x.User);
    }
}

Entity

public class Entity : IGridEnabledClass, IEquatable<Entity>
{
    public virtual int EntityId { get; set; }
    public virtual DateTime? CreateDate { get; set; }
    public virtual DateTime? ChangeDate { get; set; }
    public virtual int ChangedBy { get; set; }
    public virtual bool Archived { get; set; }

    public virtual bool IsNew()
    {
        return EntityId == 0;
    }

Пользователь

 public class User : DomainEntity, IUser
{
    public virtual string UserId { get; set; }
    [ValidateNonEmpty]
    public virtual string FirstName { get; set; }
    public virtual string MiddleInitial { get; set; }
    [ValidateNonEmpty]
    public virtual string LastName { get; set; }
    public virtual string Title { get; set; }
    public virtual DateTime? BirthDate { get; set; }
    public virtual string StartPage { get; set; }
    public virtual UserLoginInfo UserLoginInfo { get; set; }
    public virtual UserStatus UserStatus { get; set; }
    public virtual Photo HeadShot { get; set; }
    private readonly IList<Document> _documents = new List<Document>();
    public virtual IEnumerable<Document> Documents { get { return _documents; } }
    public virtual void Remove(Document document)
    {
        _documents.Remove(document);
    }
    public virtual void Add(Document document)
    {
        if (!document.IsNew() && _documents.Contains(document)) return;
        _documents.Add(document);
    }
    several more collections

public class UserMap : DomainEntityMap<User>
{
    public UserMap()
    {
        Map(x => x.UserId);
        Map(x => x.FirstName);
        Map(x => x.MiddleInitial);
        Map(x => x.LastName);
        Map(x => x.BirthDate);
        Map(x => x.StartPage);
        References(x => x.UserStatus);
        References(x => x.UserLoginInfo);
        References(x => x.HeadShot);
        HasMany(x => x.Documents).Access.CamelCaseField(Prefix.Underscore); 

создание таблиц базы данных из сценария выбора для пункта меню в студии управления

  SELECT [EntityId]
  ,[CreateDate]
  ,[ChangeDate]
  ,[ChangedBy]
  ,[Archived]
  ,[Name]
  ,[Description]
  ,[FileUrl]
  ,[Pages]
  ,[Size]
  ,[FileType]
  ,[DocumentCategoryId]
  ,[UserId]
  FROM [DecisionCriticalSuite].[dbo].[Document]
 GO


  SELECT [EntityId]
  ,[CreateDate]
  ,[ChangeDate]
  ,[ChangedBy]
  ,[Archived]
  ,[TenantId]
  ,[OrgId]
  ,[UserId]
  ,[FirstName]
  ,[MiddleInitial]
  ,[LastName]
  ,[BirthDate]
  ,[StartPage]
  ,[UserStatusId]
  ,[UserLoginInfoId]
  ,[HeadShotId]
  ,[OrganizationId]
  FROM [DecisionCriticalSuite].[dbo].[User]
  GO

ошибка от nhprof

ERROR: 
Invalid column name 'UserId'.
Invalid column name 'UserId'.
Invalid column name 'EntityId'.
Invalid column name 'EntityId'.
Invalid column name 'CreateDate'.
Invalid column name 'ChangeDate'.
Invalid column name 'ChangedBy'.
Invalid column name 'Archived'.
Invalid column name 'FileType'.
Invalid column name 'UserId'.Could not execute query: SELECT documents0_.UserId as UserId1_, documents0_.EntityId as EntityId1_, documents0_.EntityId as EntityId49_0_, documents0_.CreateDate as CreateDate49_0_, documents0_.ChangeDate as ChangeDate49_0_, documents0_.ChangedBy as ChangedBy49_0_, documents0_.Archived as Archived49_0_, documents0_.Name as Name49_0_, documents0_.Description as Descript7_49_0_, documents0_.FileUrl as FileUrl49_0_, documents0_.Pages as Pages49_0_, documents0_.Size as Size49_0_, documents0_.FileType as FileType49_0_, documents0_.DocumentCategoryId as Documen12_49_0_, documents0_.UserId as UserId49_0_ FROM [Document] documents0_ WHERE           documents0_.UserId=@p0

Ответы [ 2 ]

20 голосов
/ 09 августа 2011

Убедитесь, что nhibernate выполняет запросы к той же базе данных, к которой вы обращаетесь в sql management studio.

0 голосов
/ 30 июля 2018

У меня была та же проблема, потому что я сопоставил Entity1.Entity2 с Entity3.

Так что при присоединении он попытался бы использовать свойство из Entity3, как если бы оно существовало в Entity2.

...