Asp.net mvc 4 具有两个导航属性的延迟加载 设置
我有一个相当简单的3类设置如下。当然还有很多其他属性,但它们在这里并不相关 型号Asp.net mvc 4 具有两个导航属性的延迟加载 设置,asp.net-mvc-4,entity-framework-5,Asp.net Mvc 4,Entity Framework 5,我有一个相当简单的3类设置如下。当然还有很多其他属性,但它们在这里并不相关 型号 public class Employee { public int EmployeeId { get; set; } public string UserName { get; set; } public string Name { get; set; } public ICollection<Position> Positions { get; set; } } publ
public class Employee {
public int EmployeeId { get; set; }
public string UserName { get; set; }
public string Name { get; set; }
public ICollection<Position> Positions { get; set; }
}
public class Position {
public int PositionId { get; set; }
public int EmployeeId { get; set; }
[ForeignKey("EmployeeId")]
public Employee Employee { get; set; }
public int location { get; set; }
[ForeignKey("location")]
public Location Location { get; set; }
}
public class Location {
public int LocationId { get; set; }
public string Name { get; set; }
}
查看
@model Employee
<h1>Hi @Model.Name</h1>
<ul>
@foreach (var position in @Model.Positions) {
<li>@position.Name - @position.Location.Name</li>
}
</ul>
但是我得到了一个错误:元数据集合中有多个项与标识“Location”匹配
如果我将Position
上的Location
属性更改为PositionLocation
,则会得到:System.Reflection.AmbiguousMatchException:找到不明确的匹配
我是否应该使用一个ViewModel,并将多个查询加载到控制器中的上下文中?这似乎需要维护更多的代码,如果不需要的话,我宁愿不维护。结果表明,这是因为当您有导航属性时,EF不喜欢它,并且它的外键只根据大小写不同。如果模型中的任何位置都有一个属性,即使在当前请求中未引用此属性,也会出现此错误 将导致含糊不清的MatchException的示例:
public int location {get;set;}
[ForeignKey("location")]
public Location Location {get;set;}
工作正常的示例:
public int locationid {get;set;}
[ForeignKey("locationid")]
public Location Location {get;set;}
我想知道您调用的Location类与Position类中使用的属性同名这一事实是否有问题。@Corylulu尝试将属性更改为“PositionLocation”,现在我得到了
System.Reflection.AmbiguousMatchException:找到了不明确的匹配。
您确定所有更改都正确吗?是否相应地更新了引用位置的所有实例?好像有什么遗漏了。也许可以编辑整个代码以反映任何新的更改。@Corylulu我仔细检查了一遍,它仍然给出了那个错误。
public int location {get;set;}
[ForeignKey("location")]
public Location Location {get;set;}
public int locationid {get;set;}
[ForeignKey("locationid")]
public Location Location {get;set;}