实体框架在插入记录后返回没有关系的实体

时间:2016-06-17 10:51:06

标签: c# entity-framework-6

我正在开发一个项目,并使用实体框架。

我的项目基于存储库模式,因此我编写了一个通用基类。

我的代码是这样的:

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; }
}

2 个答案:

答案 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真正想要的内容后,我可以建议这样的改变:

  1. 创建一些界面IEntity并由您的类实现。
  2. 使用&#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)

你应该使用延迟加载并使用断点进行检查,并说它没有关系。如果是这种情况,你可以刷新它并检查。