我在通用基类中有以下方法:
public virtual void Insert(TEntity entity) {
dbSet.Add(entity);
}
Run Code Online (Sandbox Code Playgroud)
我的服务层使用该Insert方法添加新记录。现在我希望能够返回一个布尔值,以确保它正确插入。类似于以下内容:
public virtual int Count {
get {
return dbSet.Count();
}
}
public virtual bool Insert(TEntity entity) {
int count = this.Count;
dbSet.Add(entity);
return this.Count == count + 1;
}
Run Code Online (Sandbox Code Playgroud)
有没有更优雅的方法呢?我是否完全错误地接近它?我可以为 Delete 方法做类似的事情,但是我将如何检查 anUpdate是否已成功执行?
是的, context.Accounts.Find(id) ,其中 id 是主键,它确实为我带来了正确的帐户。但我想从 context.Accounts 中使用字符串用户名进行搜索,而不是按主键。
更准确地说,方法:
public void Authenticate(string username, password)
{ result = false;
Accounts test = new Accounts();
test.User = username;
Accounts dbEntry = new Accounts();
dbEntry = context.Accounts_.Find(test.User);
if (dbEntry.Password == password)
if(dbEntry.Admin == 1)
result = true;
return result;
}
Run Code Online (Sandbox Code Playgroud)
那么用户名不再是主键,我如何在没有 Find() 函数的情况下找到正确的用户名?
我正在运行以下查询和代码,我希望在 KeyValuePair 上返回两列。我看到返回的总行是正确的,但所有的键值对都是空的!
string query = @"Select id,name from persons";
var persons = context.Database.SqlQuery<KeyValuePair<string,string>>(query);
Run Code Online (Sandbox Code Playgroud)
我看到一个答案说我必须创建一个类才能得到结果;但我的问题是我不能在 KeyValuePair 上得到结果吗?或者我必须定义一个属性匹配的类?
DbContext使用预先加载查询 a时,需要Include("Navigation")填充导航属性。然而,在某些情况下,我想简单地为一个实体提供Include 所有导航属性。有没有办法做到这一点,或者有办法做到这一点?我假设你可以通过反思,但我宁愿避免这种情况。
我知道的:
var entity = db.Table.Include("Navigation1").Include("Navigation2").First();
Run Code Online (Sandbox Code Playgroud)
我想要的是:
var entity = db.Table.IncludeAll().First();
Run Code Online (Sandbox Code Playgroud) 我开发了一个 MVC5 应用程序。数据库上下文派生自IdentityDbContext. 当我创建数据库上下文的实例并调用基类时,它IdentityDbContext正在调用一个Database.Exists()方法。
无论如何我可以阻止它,因为当用户点击登录页面时,它需要一个UserManager需要 a 的DbContext,因此它查询数据库以查看数据库是否存在。
在任何情况下,在每个页面上,我的控制器构造函数都会设置它,UserManager以便始终发送此查询。
谢谢。
所以我试图实现我的 IoC,将我的 DBContext 类链接为依赖注入作为服务提供者。
我在启动 ASP Core 应用程序时遇到此错误所以我的问题是;我做错了什么,我尝试用谷歌搜索它,但我无法真正找到解决方案。我尝试询问校园里一些更精英的程序员,但他们没有专门使用 ASPnet Core,所以他们不知道这是因为我的选角还是因为 ASPnet Core
应用程序启动异常:System.InvalidCastException:无法将类型“Microsoft.Extensions.DependencyInjection.ServiceLookup.ServiceProviderEngineScope”的对象强制转换为类型“Microsoft.Extensions.DependencyInjection.ServiceProvider”。在 F:\Developement\SpackkMVC\Spackk\Spackk\Startup.cs 中的 Spackk.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) 处:第 44 行 --- 抛出异常的上一个位置的堆栈跟踪结束 --- - 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 构建器)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication() crit:Microsoft.AspNetCore.Hosting.Internal.WebHost[6] 应用程序启动异常 System.InvalidCastException:无法转换类型为“Microsoft.Extensions.DependencyInjection.ServiceLookup”的对象.ServiceProviderEngineScope”以键入“Microsoft.Extensions.DependencyInjection.ServiceProvider”。在 F:\Developement\SpackkMVC\Spackk\Spackk\Startup.cs 中的 Spackk.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, IServiceProvider serviceProvider) 处:第 44 行 --- 抛出异常的上一个位置的堆栈跟踪结束 --- - 在 Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.HostFilteringStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 应用程序) 在 Microsoft.AspNetCore.Hosting.Internal.AutoRequestServicesStartupFilter.<>c__DisplayClass0_0.b__0(IApplicationBuilder 构建器)在 Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
这是启动时代码的样子
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.Configuration;
using …Run Code Online (Sandbox Code Playgroud) c# dependency-injection dbcontext asp.net-mvc-5 asp.net-core
我有一些问题DbContext。我决定创建一个新类,它将负责与DataBase 的连接。
public class PetAlertContext : DbContext
{
public PetAlertContext() : base("PetAlert") { }
public DbSet<Zwierze> Zwierzaki { get; set; }
public DbSet<Osoba> Osoby { get; set; }
public DbSet<Placowka> Placowki { get; set; }
public DbSet<Ogloszenie> Ogloszenia { get; set; }
}
}
Run Code Online (Sandbox Code Playgroud)
但我在基地名称附近有一些例外:
参数 1:无法将“字符串”转换为“Microsoft.EntityFrameworkCore.DbContextOptions”。
我发现了类似的问题和类似这样的代码的响应,但我在理解这种结构时遇到了一些问题。
你会这么好心帮我吗?我评论了这些:
public PetAlertContext(string connectionString) : base(GetOptions(connectionString))
{
}
private static DbContextOptions GetOptions(string connectionString)
{
return SqlServerDbContextOptionsExtensions.UseSqlServer(new DbContextOptionsBuilder(), connectionString).Options;
}
Run Code Online (Sandbox Code Playgroud) 我的数据库上下文类如下
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)
哪一个是解决此警告的最佳选项,并且还支持测试用例。?
我正在使用以下代码来更新db中的某些记录:
IList<Item> list;
using (DbContext context = new DbContext()
{
list = Item.ToList();
foreach (Item item in list)
{
// attach the item
context.Item.Attach(item);
item.Updated = DateTime.Now;
context.Items.Add(item);
context.SaveChanges();
}
}
Run Code Online (Sandbox Code Playgroud)
问题是EF正在插入一个新项目,而不是更新更新的项目......我在网站上搜索了abit并看到了将项目附加到DbContext的建议,但那不起作用?我究竟做错了什么?
所以我有我的Weapons数据库.我的应用程序的工作方式是,如果用户在文本框中键入某些内容,我的程序将搜索该WeaponName表以查看它是否存在.
问题是当我使用这个Lambda/LINQ时,它不能将它用作bool值.
private WeaponEntities dbContext = new WeaponEntities();
if (dbContext.Weapons.Where(weapon => weapon.WeaponName == searchBox.Text))
{
}
Run Code Online (Sandbox Code Playgroud)