2016-09-10 21 views
0

C#とNhibernateの学習を始めました。次の問題を何時間も解決しようとしています。C#Nhibernateクエリが機能しません。

誰でも問題を見ることができますか?

ライン

CREATE TABLE [dbo].[Line] 
(
    [ID]  UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Name]  NVARCHAR (45) NOT NULL, 
    [ID_Color] UNIQUEIDENTIFIER NULL, 

    PRIMARY KEY CLUSTERED ([ID] ASC), 

    UNIQUE NONCLUSTERED ([Name] ASC), 

    FOREIGN KEY ([ID_Color]) 
      REFERENCES [dbo].[Line_Color] ([ID]) ON DELETE SET NULL 
); 

Line_Color

CREATE TABLE [dbo].[Line_Color] 
(
    [ID] UNIQUEIDENTIFIER DEFAULT (newid()) NOT NULL, 
    [Color] NVARCHAR (45) NOT NULL, 

    PRIMARY KEY CLUSTERED ([ID] ASC), 
    UNIQUE NONCLUSTERED ([Color] ASC) 
); 

Entity.cs

public class Entity<T> where T : Entity<T> 
{ 
     public virtual Guid Id { get; set; } 

     private int? _oldHashCode; 

     public override Boolean Equals(object obj) 
     { 
      var other = obj as T; 

      if (other == null) 
       return false; 

      // handle the case of comparing two NEW objects 
      var otherIsTransient = Equals(other.Id, Guid.Empty); 
      var thisIsTransient = Equals(Id, Guid.Empty); 

      if (otherIsTransient && thisIsTransient) 
       return ReferenceEquals(other, this); 

      return other.Id.Equals(Id); 
     } 

     public override Int32 GetHashCode() 
     { 
      if (_oldHashCode.HasValue) 
       return _oldHashCode.Value; 

      var thisIsTransient = Equals(Id, Guid.Empty); 

      if (thisIsTransient) 
      { 
       _oldHashCode = base.GetHashCode(); 
       return _oldHashCode.Value; 
      } 

      return Id.GetHashCode(); 
     } 

     public static Boolean operator ==(Entity<T> x, Entity<T> y) 
     { 
      return Equals(x, y); 
     } 

     public static Boolean operator !=(Entity<T> x, Entity<T> y) 
     { 
      return !(x == y); 
     } 
} 

Line.cs

public class Line : Entity<Line> 
{ 
     public virtual String Name { get; set; } 
     public virtual Color Color { get; set; } 
} 

LineMap.cs

public class LineMap : ClassMap<Line> 
{ 
     public LineMap() 
     { 
      Id(x => x.Id); 
      Map(x => x.Name); 
      References(x => x.Color); 
     } 
} 

Color.cs

public class Color : Entity<Color> 
{ 
     public virtual String ColorS { get; set; } 
} 

ColorMap.cs

私は、すべてのクエリに
public class ColorMap : ClassMap<Color> 
{ 
     public ColorMap() 
     { 
      Id(x => x.Id); 
      Map(x => x.ColorS); 
     } 
} 

、私はタイプ の何か

などの未処理の例外「NHibernate.Exceptions.GenericADOException」はNHibernate.dll

で発生しました追加情報を取得:クエリを実行できませんでした

またはNULL。

+0

(それはクエリを実行できなかった場合)通常、内部例外があるはず、それが実行にtriyngたクエリの詳細を与える、あなたにこれを持っています場合? – starlight54

+0

これは '{"無効なオブジェクト\ "色\"です。 "}' @ starlight54 – Muco

答えて

0

あなたのコード内の2つの問題があります

  • は実体がColorと対応するテーブルLine_Color命名されました。
  • プロパティの名前はColorSで、対応する列の列はColorです。

これらは対応している必要があります。または、NHibernateにDB名を伝える必要があります。いくつかの名前を変更(できれば)したり、マッピングを調整したりしてください。

ColorMap.cs

public class ColorMap : ClassMap<Color> 
{ 
     public ColorMap() 
     { 
      Table("Line_Color"); 
      Id(x => x.Id); 
      Map(x => x.ColorS).Column("Color"); 
     } 
} 
関連する問題