我的目标是为单个ParentId检索ParentTypeId 我一直在寻找和尝试各种方法 但最终我的所有查询都返回ParentId而不是ParentTypeId 。
我的模型有这两个表:
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查询返回正确的结果:
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();
为什么?
答案 0 :(得分:1)
您错误地创建了外键。
ParentTypeId
必须是Parent
表的外键。
主表格必须为ParentType
。
参见我的例子:
Parent
上课
public class Parent
{
[DatabaseGenerated(DatabaseGeneratedOption.Identity)]
[Index("ParentIdIndex", IsUnique = true)]
public int ParentId { get; set; }
public string ParentName { get; set; }
[ForeignKey("ParentType")]
public int ParentTypeId { get; set; }
public virtual ParentType ParentType{ get; set; }
}
和ParentType
类
public class ParentType
{
[Key]
public int ParentTypeId { get; set; }
public string ParentTypeName { get; set; }
public virtual IEnumerable<Parent> Parents { get; set; }
}
您可以像这样轻松获取ParentTypeId
var parentItem = (
from t1 in db.Parents
where (t1.ParentId == 12345)
select t1
).FirstOrDefault();
// parentItem.ParentTypeId