我正在开发一个项目,并使用实体框架。
我的项目基于存储库模式,因此我编写了一个通用基类。
我的代码是这样的:
public T Add(T entity)
{
Context.Set<T>().Add(entity);
Context.SaveChanges();
_context = new SafranEntities();
return entity;
}
我想在插入后使用实体进行列表,但是这段代码返回一个没有关系的实体。
有人知道如何实现这个目标吗?谢谢。
我的实体是这样的:
public partial class NoteInfo
{
public int NoteID { get; set; }
public Nullable<int> MemberID { get; set; }
public Nullable<int> ProjectID { get; set; }
public string NoteTopic { get; set; }
public string NoteText { get; set; }
public virtual Membership Membership { get; set; }
public virtual ProjectInfo ProjectInfo { get; set; }
}
答案 0 :(得分:0)
我认为问题可能是您没有在您的实体上指定虚拟关键字。 所以,例如,如果你有这样的实体
public class A{
public B ReferenceToB {get;set;}
}
然后你会做类似的事情:
var aObj = new A();
var bObj = new B();
a.ReferenceToB = bObj()
Context.Set<T>().Add(aObj);
引用将保存在数据库中,但是当您尝试从数据库返回aObj时,引用将为null。
要解决此问题,请确保将所有导航属性标记为虚拟:
public class A{
public virtual B ReferenceToB {get;set;}
}
<强>更新强>
在了解了OP真正想要的内容后,我可以建议这样的改变:
使用&#34;其中&#34;在泛型方法上,通过接口IEntity限制实体
public interface IEntity {
Guid Id {get;set;}
}
public static T Add(T entity) where T:class, IEntity {
Context.Set().Add(entity);
Context.SaveChanges();
return Context.Set().Find(entity.Id);
}
答案 1 :(得分:0)
你应该使用延迟加载并使用断点进行检查,并说它没有关系。如果是这种情况,你可以刷新它并检查。