Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 实体框架代码优先引用_C#_Entity Framework_Entity Framework 6 - Fatal编程技术网

C# 实体框架代码优先引用

C# 实体框架代码优先引用,c#,entity-framework,entity-framework-6,C#,Entity Framework,Entity Framework 6,我有一个奇怪的空引用,它将数据添加到我的数据库中。 我在一个模型中有三个关键参考。两个关键的工作完美,但最后。。。 例如,我的简单代码优先模型: [Table("Users")] public partial class User { [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int ClientId { get; set; } [StringLength(60)] p

我有一个奇怪的空引用,它将数据添加到我的数据库中。 我在一个模型中有三个关键参考。两个关键的工作完美,但最后。。。 例如,我的简单代码优先模型:

   [Table("Users")]
public partial class User
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int ClientId { get; set; }
    [StringLength(60)]
    public string ClientType { get; set; }
    [StringLength(160)]
    public string ClientName { get; set; }
    public virtual ICollection<Repair> Repairs { get; set; }
    public User()
    {
        Repairs = new List<Repair>();
    }
}
[Table("Engineers")]
public partial class Engineer
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int Id { get; set; }

    [StringLength(70)]
    public string Name { get; set; }

    public virtual ICollection<Repair> Repairs { get; set; }
    public Engineer()
    {
        Repairs = new List<Repair>();
    }
}
[Table("CurrentStatuses")]
public partial class CurrentStatus
{
    [Key, DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int StatusId { get; set; }

    [StringLength(60)]
    public string Status { get; set; }

    public virtual ICollection<Repair> Repairs { get; set; }
    public CurrentStatus()
    {
        Repairs = new List<Repair>();
    }
}
我想添加新的“修复”: 1) 工程师:

        public static async Task<ObservableCollection<Engineer>> GetAllEngineers()
    {
        using (var cntx = new ServiceDBContext())
        {
            ObservableCollection<Engineer> tmp = new ObservableCollection<Engineer>();
            await (cntx.Engineers.Include(xx => xx.Repairs).ForEachAsync(new Action<object>((object obj) => { tmp.Add((Engineer)obj); })));
            return tmp;

        }
    }
当我想再次获取FastRepair.CurrentStatus时,我有NullReferenceException,在数据库中所有三列都有数字,数据库有表的键。SaveChanges()成功添加所有数据。一切正常,但实体仅在当前状态下抛出NullReference(工程师、用户表成功地通过include和etc获取)

公共静态异步任务GetFullRepairs() { 使用(var cntx=new ServiceDBContext()) { ObservableCollection tmp=新的ObservableCollection(); wait(cntx.Repairs.Include(xx=>xx.Engineer).Include(zz=>zz.CurrentStatus).Include(yy=>yy.User).ForEachAsync(新操作((对象对象对象对象)=>{tmp.Add((修复)对象);})); 返回tmp; } } 此时LazyLoading已禁用,但没有更改

数据库被删除5次,重新编译,谷歌不工作:( 也许有人能帮我!
谢谢!

在每个方法中创建上下文不是很明智。请查看存储库模式并通过依赖项注入注入上下文。您的代码几乎不可测试。就个人而言,如果我看到用于此功能的静态方法,我会患上眼癌:-)

这可能是一种后遗症,因为这种非共享环境。 这里使用的是哪个EF版本?6.5.
有没有理由不在您的模式中使用FluentAPI?如果映射错误,fluent表示法会提供更多错误功能和信息。

首先,这段代码不好。 不要使用静态方法-使用存储库模式。 回答 此代码在GetFullRepairs()中有错误。工作需要:

(((((cntx.Repairs.Include(ee=> ee.User)).Include(xx => xx.Engineer)).Include(yy => yy.RepairStatus))

谢谢你的回答!EF 6.1.3。此代码来自第一步。:-)此时此刻,我正在阅读关于这种模式的信息,但我有一些愚蠢的问题。另外,我重用NuGet并用这么多的“(“我认为当前状态正在工作…:-|((((cntx.Repairs.Include(ee=>ee.User)).Include(xx=>xx.Engineer)).Include(yy=>yy.CurrentStatus))
        using (var cntx = new ServiceDBContext())
        {
            ObservableCollection<User> tmp = new ObservableCollection<User>();
            List<User> users = await cntx.Users.ToListAsync();
            foreach (var itm in users)
            {
                tmp.Add(itm);
            }

            return tmp;
        }
    }
 internal static async Task<ObservableCollection<CurrentStatus>> GetAllCurrentStatuses()
    {
        using (var cntx = new ServiceDBContext())
        {
            ObservableCollection<CurrentStatus> tmp = new ObservableCollection<CurrentStatus>();
            await(cntx.CurrentStatuses.ForEachAsync(new Action<object>((object obj) => { tmp.Add((CurrentStatus)obj); })));
            return tmp;

        }
    }
        private void _addRepair()
    {

        FastRepair.Id =  2;
        FastRepair.Date = SelectedDate;
        FastRepair.User = SelectedUser;
        ...
        FastRepair.CurrentStatus = SelectedStatus

        using (ServiceDBContext cntx = new ServiceDBContext())
        {
            cntx.Users.Attach(FastRepair.User);
            cntx.Engineers.Attach(FastRepair.Engineer);
            cntx.CurrentStatuses.Attach(FastRepair.CurrentStatus);

            cntx.Repairs.Attach(FastRepair);
            cntx.Entry(FastRepair).State = EntityState.Added;

            cntx.SaveChanges();
        }
  public static async Task<ObservableCollection<Repair>> GetFullRepairs()
    {
         using (var cntx = new ServiceDBContext())
            { 

            ObservableCollection<Repair> tmp = new ObservableCollection<Repair>();
            await (cntx.Repairs.Include(xx => xx.Engineer).Include(zz=> zz.CurrentStatus).Include(yy => yy.User).ForEachAsync(new Action<object>((object obj) => { tmp.Add((Repair)obj); })));
            return tmp;
        }
    }
(((((cntx.Repairs.Include(ee=> ee.User)).Include(xx => xx.Engineer)).Include(yy => yy.RepairStatus))