我正在使用C#/ MVC继承。我有一个父类Parent
,具有各种属性,还有一个子Child
,它继承自Parent
并为多对多关系添加属性。我刚才在其他地方读过,使用继承正确处理这个需要一个重写的方法来返回Child
的属性,所以我试图这样做(因为C#不会识别Child
的属性因此不能直接查询它。)
但是,该方法始终返回null
,父类型的实际导航属性也是null
。我对这种方法和/或映射做错了什么?
Parent
:
public class Parent
{
public virtual int Id { get; set; }
// other irrelevant properties
public virtual ICollection<Property> GetChildProps()
{
// meant to be overridden by Child
return null;
}
public virtual void SetChildProps(ICollection<Property> props)
{
// meant to be overridden by Child
}
}
Child
:
public class Child : Parent
{
public ICollection<Property> Properties { get; set; }
public override ICollection<Property> GetChildProps()
{
return Properties;
}
public override void SetChildProps(ICollection<Property> props)
{
Properties = props;
}
}
EF Mapping。大多数映射都是在父类映射中完成的(使用EF TPH),但此关系在此处进行映射。值 正确存储在数据库中。
public ChildTaskMap()
{
HasMany(s => s.Properties)
.WithMany(o => o.Children)
.Map(m =>
{
m.ToTable("Child_Properties");
m.MapLeftKey("ChildId");
m.MapRightKey("PropertyId");
});
}
这是我调用GetChildProps()
的一次(总是返回null):
Parent p = _parentService.GetParentById(id);
var cProps = p.GetChildProps();
GetParentById()
的代码:
public Project GetById(int id)
{
return _parentRepository.GetById(id);
}
// then
public T GetById(object id)
{
return this.Entities.Find(id);
}
// Entities is
private IDbSet<T> Entities
{
get
{
if (_entities == null)
_entities = _context.Set<T>();
// _entities is an IDbSet<T>
return _entities;
}
}