标签: dbset

DbSet.Add() 不起作用

我有一堂这样的课:

[Table("member_activation")]
public partial class MemberActivation
{
    [Key]
    public Int64 member_id { get; set; }
    public String token { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我的数据库:

public class SMADbContext : DbContext
{
    public SMADbContext() : base("SMADB")
    {
        Database.SetInitializer<SMADbContext>(new NullDatabaseInitializer<SMADbContext>());
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        base.OnModelCreating(modelBuilder);
    }

    public DbSet<Member> Members { get; set; }
    public DbSet<MemberActivation> MemberActivations { get; set; }
    public DbSet<ApiAccount> ApiAccounts { get; set; }
    public DbSet<ApiHardware> ApiHardwares { get; set; }
    public DbSet<MemberRelation> MemberRelations { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# asp.net dbset

5
推荐指数
1
解决办法
1万
查看次数

Moq DbSet NotImplementedException

我有一个 Moq DbSet,直到最近一直在工作,但是自从上次更新依赖项以来,它一直在抛出一个NotImplementedExceptiononIQueryable.Provider

使用的代码如下:

var mockSet = new Mock<DbSet<A>>();
var list = new List<A>();
var queryable = list.AsQueryable();
mockSet.As<IQueryable<A>>().Setup(m => m.Provider).Returns(queryable.Provider);
mockSet.As<IQueryable<A>>().Setup(m => m.Expression).Returns(queryable.Expression);
mockSet.As<IQueryable<A>>().Setup(m => m.ElementType).Returns(queryable.ElementType);
mockSet.As<IQueryable<A>>().Setup(m => m.GetEnumerator()).Returns(() => queryable.GetEnumerator());

var f =mockSet.Object.FirstOrDefault(); // NotImplementedException thrown here
Run Code Online (Sandbox Code Playgroud)

抛出的异常如下:

System.NotImplementedException
The member 'IQueryable.Provider' has not been implemented on type
'DbSet`1Proxy_1' which inherits from 'DbSet`1'.
Test doubles for 'DbSet`1' must provide implementations of methods
and properties that are used.
Run Code Online (Sandbox Code Playgroud)

c# entity-framework moq dbset

5
推荐指数
1
解决办法
2538
查看次数

继承自DbSet <T>以添加属性

有没有办法从DbSet继承?我想添加一些新属性,如下所示:

public class PersonSet : DbSet<Person>
{
    public int MyProperty { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

但我不知道如何在我的DbContext中实例化它

public partial MyContext : DbContext
{
    private PersonSet _personSet; 
    public PersonSet PersonSet
    {
        get 
        {
            _personSet = Set<Person>(); // Cast Error here
            _personSet.MyProperty = 10;
            return _personSet;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能做到这一点?

inheritance entity-framework dbcontext dbset

4
推荐指数
2
解决办法
3382
查看次数

DbContext如何初始化自动DbSet <T>属性?

考虑以下课程:

class MyContext : DbContext
{
    public DbSet<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

并实例化一个新对象:

var mycontext = new MyContext();
Run Code Online (Sandbox Code Playgroud)

为什么mycontext.Orders不为null?什么时候初始化?谁初始化了它?我真的很困惑,因为基类(DbConetxt)无法访问派生类属性,因此不可能在基础对象中初始化自动属性.

dbcontext entity-framework-5 dbset

3
推荐指数
1
解决办法
1424
查看次数

FakeItEasy DbSet/IQueryable <T> - 实体框架6

我想知道是否有人在FakeItEasy 这篇文章中有类似的例子(原帖是在这里.我一直试图找到正确的设置,但无法正确.我在网上找不到任何例子.我开始教我自己单元测试,我决定使用FakeItEasy.到目前为止,我所有的项目都使用实体框架而不使用Repository/UOW模式,因为我认为DbSet和DbContext足以满足我的小规模应用程序.我明白有利可图EF和单元测试,但我仍然想知道这一点.我很确定我的尝试(见下文)我已经离开了,因为我得到的错误是

System.NotImplementedException:成员'IQueryable.Provider'尚未在类型'DbSet 1Proxy' which inherits from 'DbSet1'上实现.'DbSet`1'的测试双精度必须提供所使用的方法和属性的实现.

任何方向都会非常有帮助.谢谢.

var data = new List<Request> 
{ 
request1, 
request2, 
request3
}.AsQueryable();

var fakeDbSet = A.Fake<DbSet<Request>>();

A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Provider).Returns(data.Provider);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).Expression).Returns(data.Expression);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).ElementType).Returns(data.ElementType);
A.CallTo(() => ((IQueryable<Request>)fakeDbSet).GetEnumerator()).Returns(data.GetEnumerator());

var fakeContext = A.Fake<RequestPortalContext>();
A.CallTo(() => fakeContext.Requests).Returns(fakeDbSet);

var service = new RequestReadService(fakeContext);
var requests = service.GetAllRequests();

Assert.AreEqual(3, requests.Count);
Assert.AreEqual("Test1", requests[0].Name);
Assert.AreEqual("Test2", requests[1].Name);
Assert.AreEqual("Test3", requests[2].Name);
Run Code Online (Sandbox Code Playgroud)

unit-testing fakeiteasy dbcontext dbset entity-framework-6

3
推荐指数
1
解决办法
4278
查看次数

ASP.MVC db Find(),但带有非主键参数

如何使用不是主键的键获取结果列表?更具体地说,我有一个复合主键,我想用一列的参数检索所有匹配.

我想,在Controller的ActionResult中,它就像是

tableModel tbmodel = db.tableModels.Find(i => i.partialPK == parameter)
Run Code Online (Sandbox Code Playgroud)

但情况并非如此,因为Find()仅适用于整个PK.

我在实体模型类中声明了我的PK:

    [Key]
    [Column(Order = 0)] 
    public int PK1 { get; set; }
    [Key]
    [Column(Order = 1)] 
    public string PK2 { get; set; }
Run Code Online (Sandbox Code Playgroud)

database asp.net-mvc find composite-primary-key dbset

2
推荐指数
1
解决办法
2万
查看次数

X是一个变量,但在尝试投射时像一个类型一样使用

我传递了一个我要查询的实体类型名称的字符串,并根据字符串获取类型.我想得到DbSet回来并返回IQueryable.问题出在我正在做的事情(DbSet<tableEntity>)并收到以下错误:

tableEntity是一个变量,但像类型一样使用

当试图施放.有办法解决这个问题吗?

public object GetList(string tableEntity)
{
    Type tableEntity = Type.GetType("TestProject." + typeName + ", TestProject");

    var dbObject = (DbSet<tableEntity>)typeof(DbContext).GetMethod("Set", Type.EmptyTypes)
                        .MakeGenericMethod(tableEntity)
                        .Invoke(databaseContext, null);

    return dbObject.AsQueryable();            
}
Run Code Online (Sandbox Code Playgroud)

编辑

只是要添加我无法访问我们通过字符串传递名称的类型.

c# reflection types dbset

2
推荐指数
1
解决办法
1万
查看次数

dbset 属性的 DBcontext 类中的不可为空属性警告

我的数据库上下文类如下

public class DataContext : DbContext
{
    public DataContext(DbContextOptions options) : base(options) 
    {
    }
    
    public DbSet<Customer> Customers;
    public DbSet<Order> Orders;
}
Run Code Online (Sandbox Code Playgroud)

它警告说

non-nullable property 'Orders' must contain a non-null value when exiting the constructor. Consider declaring the property as nullable
Run Code Online (Sandbox Code Playgroud)

我手头上有两个选择可以解决,但不确定哪个是好的。

选项 1) 使属性可为空

public DbSet<Order>? Orders;
Run Code Online (Sandbox Code Playgroud)

选项 2) 在构造函数中将属性设置为空集

public DataContext(DbContextOptions options) : base(options) 
    {
        this.Orders =  this.Set<Order>();
    }

Run Code Online (Sandbox Code Playgroud)

哪一个是解决此警告的最佳选项,并且还支持测试用例。?

c# warnings entity-framework dbcontext dbset

2
推荐指数
1
解决办法
2263
查看次数

我如何使用|| lambda表达式中的运算符

我如何使用|| (或)lambda表达式中的运算符?

这是我尝试过的:

db.assets.Where((u => u.userName.Equals(userName)) || (c => c.category.Equals("DefaultMapMarker"))
Run Code Online (Sandbox Code Playgroud)

提前致谢

编辑

我想获得当前用户的资产列表,以及所有用户的所有资产.所有用户的资产都有一个DefaultMapMarker类别.

c# lambda or-operator dbset

0
推荐指数
1
解决办法
543
查看次数

如果没有正确初始化标识列,DbSet.Create()的目的是什么?

在使用中Entity Framework Database First,

为什么在我的任何DbContext Sets一个中发出Create方法会创建一个set实体的实例而不增加其Identity列?

考虑到我构建了我想要首先添加到给定集合的所有实体,并且最后只有一次,我将它们全部添加到DbContext.SaveChanges()- DbSet.Create()如果不是属性初始化标识列,那么真正使用的是什么?我可以简单地手动实例化我的DbSetasvar newEntity = new MyClass();

entity-framework dbset

0
推荐指数
1
解决办法
475
查看次数

使用EF Core和条件WHERE子句从数据库读取行时出现问题

我想在我的ASP .Net Core 3.0 Web API中查询MySql数据库,并有条件地应用一些WHERE筛选器。所以我在我的控制器动作之一中有这个:

[HttpGet]
public async Task<IEnumerable<Customer>> GetCustomers([FromQuery] bool? isActive, [FromQuery] int? typeId, [FromQuery] bool? isProcessed)
{
    var customers = _context.Customers.Where(c => c.IsDeleted == false);

    if (isActive.HasValue)
        customers = customers.Where(c => c.IsActive == isActive.Value);

    if (typeId.HasValue)
        customers = customers.Where(c => c.TypeId == typeId.Value);

    if (isProcessed.HasValue)
        customers = customers.Where(c => c.IsProcessed == isProcessed.Value);

    return await customers.ToListAsync();
}
Run Code Online (Sandbox Code Playgroud)

这完美地工作了,因为在第一行中有一个Where子句:

var customers = _context.Customers.Where(c => c.IsDeleted == false);
Run Code Online (Sandbox Code Playgroud)

但实际上我不想放入Where子句。我只想要这样:

[HttpGet]
public async Task<IEnumerable<Customer>> GetCustomers([FromQuery] bool? isActive, [FromQuery] int? typeId, [FromQuery] …
Run Code Online (Sandbox Code Playgroud)

c# linq iqueryable dbset

0
推荐指数
1
解决办法
37
查看次数