私の目標は、単一のParentIdのParentTypeIdを取得することです。
私は検索を続けてバリアスアプローチを試しています
私はすべて私のクエリを返しますParentIdではなくParentTypeIdを返します。なぜLINQは他の列の値を返しますか?
public class Parent
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index("ParentIdIndex", IsUnique = true)]
public int ParentId { get; set; }
public string ParentName {get; set;}
public virtual ParentType ParentType { get; set; }
}
public class ParentType
{
[Key, ForeignKey("Parent")]
public int ParentTypeId { get; set; }
public string ParentTypeName { get; set; }
public virtual Parent Parent { get; set; }
}
このSQLクエリは、正しい結果を返す:
私のモデルは、これらの2つのテーブルを有する
一列であるselect
ParentId,
ParentType_ParentTypeId
FROM [myDB].[dbo].[Parents]
Where ParentId = 5
:(ParentIdは= 5、ParentTypeId = 6)
しかし、C#メソッドでLINQクエリを使用すると、ParentIdの値が返されます。
ParentTypeIdの値ではありません。
var query = (
from t1 in db.Parents
where (t1.ParentId == ParentId)
select t1.ParentType.ParentTypeId
).FirstOrDefault();
なぜですか?
あなたのクエリのように簡単にParentTypeIdを得ることができますあなたが提供していないコードや使用しているデータの中にある可能性があります。 (検索されたParentIdを持つ複数の行) –
*なぜですか?[Shared Primary Key Association](https://weblogs.asp.net/manavi/associations-in-ef-4-1-code- first- part-3-shared-primary-key-associations)、したがって 'ParentTypeId'は常に' ParentId'と同じです(少なくともあなたの設定に基づくEFの観点から)。 –
さらに興味深いのは、なぜあなたのデータベースに 'ParentType_ParentTypeId'カラムがあるのでしょうか? – grek40