私はEF(コアを最初に使用しています)を初めて使用していて、しばらくの間問題を抱えています。フィールド名がプライマリキーと一致しない関連データを取得するためにEntity Frameworkコアにインクルードする
簡単に言えば、1対1でお互いに関連する2つのエンティティがあります。正常に動作します。一例では、私はAttributeTypeRefNoのためのデータベース上の属性テーブル上の物理的な列名はまさにそれであるように
[Table("Attribute", Schema = "dbo")]
public class Attribute
{
public Attribute()
{
}
[Key, Column(Order = 1)]
public Guid EntityColumnRefNo {get; set;}
public string PhysicalName {get; set;}
public string Caption {get; set;}
public AttributeType AttributeType {get; set;}
}
[Table("AttributeType", Schema = "dbo")]
public class AttributeType
{
public AttributeType()
{
}
[Key, Column(Order = 1)]
public Guid AttributeTypeRefNo {get; set;}
public string UserRefCode {get; set;}
public string Description {get; set;}
}
以下のように「子供」エンティティに関連する「親」の実体を持っています - AttributeTypeRefNo(関連性があるかどうかは不明)。次のコードを使用してAttributeモデルを返すとき
var res = db?.Attribute
.Where(x => x.EntityRefNo == entityrefNo)
.Include(c => c.AttributeType)
これは完璧に機能します。 Attributeは、入力されたAttributeTypeを返します。
私の問題は、他のモデルを属性の上に追加し、参照属性を2度追加するときに発生します。
[Table("Relations", Schema = "dbo")]
public class Relations
{
public Relations()
{
}
[Key, Column(Order = 1)]
public Guid GenRelRefNo {get; set;}
public Attribute EntityColumnTo { get; set; }
public Attribute EntityColumnFrom { get; set; }
public string CollaborationCaption {get; set;}
public string CollaborationTooltip {get; set;}
}
リレーションモデルには、2つのアトリビュートが含まれ、それぞれ異なるアトリビュートを参照します。データベースのテーブルの列名は、モデルのEntityColumnToおよびEntityColumnFromと同じです。この呼び出しは動作しません
var res = db?.Relations
.Include(c => c.EntityColumnTo)
.Include(c => c.EntityColumnFrom)
.Where(x => x.EntityColumnTo.EntityRefNo == entityrefNo
|| x.EntityColumnFrom.EntityRefNo == entityrefNo).ToList();
私は関係のモデルを使用しているコードは、私は無効な列名についてうめき声、以下のエラーが出ています。
System.Data.SqlClient.SqlException occurred
HResult=0x80131904
Message=Invalid column name 'EntityColumnFromEntityColumnRefNo'.
Invalid column name 'EntityColumnToEntityColumnRefNo'.
Invalid column name 'EntityColumnToEntityColumnRefNo'.
Invalid column name 'EntityColumnFromEntityColumnRefNo'.
Invalid column name 'EntityColumnFromEntityColumnRefNo'.
Invalid column name 'EntityColumnToEntityColumnRefNo'.
Invalid column name 'EntityColumnFromEntityColumnRefNo'.
Invalid column name 'EntityColumnToEntityColumnRefNo'.
Source=.Net SqlClient Data Provider
StackTrace:
<Cannot evaluate the exception stack trace>
私は間違っていますか?私は最初に記述したメソッドを鏡映し、それらはすべて正常に動作する他の例があります。私は、同じAttributes型のリレーションモデルの2つの宣言が問題であり、何らかの特別な処理が必要であることを確信しています。拡張メソッドやその他のナンセンスを使用して動作させるためにコードをハックしましたが、それが正しいことだとは思いません。前もって感謝します。