我知道有很多关于这个错误的帖子,但没有一个能够解决我的问题.我正在使用与SqlExpress的直接连接,因此没有特殊的Oracle或MySQL数据库或任何东西.看起来这应该像手套一样合适.
所以场景就是这样,我创建了一个由少数几个项目组成的解决方案; 存储库,数据(EF5.0),实用程序,测试项目和MVC Web应用程序.目标是使用EF5以及测试项目和MVC应用程序中的一些存储库,通过数据类通过存储库项目中的存储库访问基础SQL Express数据库.
测试项目有效,能够访问和更新数据库,没有任何问题.
然而,MVC Web项目正在抛出"无法找到所请求的.Net Framework数据提供程序.它可能未安装." 错误,我不明白,因为它使用与测试项目相同的连接字符串.
[ArgumentException: Unable to find the requested .Net Framework Data Provider. It may not be installed.]
System.Data.Common.DbProviderFactories.GetFactory(String providerInvariantName) +1426271
WebMatrix.Data.DbProviderFactoryWrapper.CreateConnection(String connectionString) +64
WebMatrix.Data.<>c__DisplayClass15.<OpenConnectionStringInternal>b__14() +16
WebMatrix.Data.Database.get_Connection() +19
WebMatrix.Data.Database.EnsureConnectionOpen() +12
WebMatrix.Data.Database.QueryValue(String commandText, Object[] args) +63
WebMatrix.WebData.DatabaseWrapper.QueryValue(String commandText, Object[] parameters) +14
WebMatrix.WebData.SimpleMembershipProvider.GetUserId(IDatabase db, String userTableName, String userNameColumn, String userIdColumn, String userName) +232
WebMatrix.WebData.SimpleMembershipProvider.ValidateUserTable() +85
Run Code Online (Sandbox Code Playgroud)
我有 ...
这是我在web.config中的内容......
<connectionStrings>
<add name="DBCatalogContext"
connectionString="metadata=res://*/DBCatalog.csdl|
res://*/DBCatalog.ssdl|
res://*/DBCatalog.msl;
provider=System.Data.SqlClient;
provider connection string="data source=.\SQLEXPRESS;
initial …
Run Code Online (Sandbox Code Playgroud) 我应该是一个非常基本的场景......我觉得我曾经做过100次,但由于某种原因,它决定不工作,浪费我的时间在一些微不足道的事情......
我正在使用带有属性路由的WebAPI(喜欢它们).
我试图传递两个参数,一个来自Body,一个来自Uri.它们都是基本类型......一个是布尔值,另一个是长期赞助商ID.
非常简单的服务签名......
[HttpPut]
[Route("adminAPI/sponsors/{sponsorID:long}/Enable")]
public HttpResponseMessage EnableSponsor([FromBody]Boolean enabled, [FromUri] Int64 sponsorID)
{
HttpResponseMessage ret = null;
// does stuff and populates the response
return ret;
}
Run Code Online (Sandbox Code Playgroud)
使用邮差和高级REST客户端和JQuery/Chrome我一直收到"错误请求"错误...
var request = function () {
$.ajax({
type: 'PUT',
url: 'http://localhost:50865/adminAPI/Sponsor/23/Enable',
data: { "enabled": true },
contentType: "application/json"
})
.done(function (data, textStatus, jqXHR) {
if ([200, 204, 304].indexOf(data.StatusCode) === -1) {
} else {
}
})
.fail(function (jqXHR, textStatus, errorThrown) {
});
};
Run Code Online (Sandbox Code Playgroud)
我收到以下错误...
参数字典包含"WEB.Admin.api.SponsorAPIController"中方法'System.Net.Http.HttpResponseMessage EnableSponsorBanner(Boolean,Int64)'的非可空类型'System.Boolean'的参数'enabled'的空条目.可选参数必须是引用类型,可空类型,或者声明为可选参数."
由于某种原因,[FromBody]参数未与请求一起传递,从而导致错误.当我使参数为nullable时,请求会通过但是,正如预期的那样,enabled参数是NULL? …
我是 Oracle 的新手,虽然我已经相当广泛地使用了 SQL Server,但我没有必要深入研究数据库设计的细节……特别是 INDEXES。因此,我花了大量时间阅读有关索引的教程……无论是概念还是 Oracle 特定的。
为了将我的理解付诸实践,我建立了一个带有一些基本索引的非常简单的表。
CREATE TABLE "SYSTEM"."TBL_PERSON"
(
"PERSON_ID" NUMBER(10,0) NOT NULL ENABLE,
"FIRST_NAME" NVARCHAR2(120) NOT NULL ENABLE,
"MIDDLE_NAME" NVARCHAR2(120),
"LAST_NAME" NVARCHAR2(120) NOT NULL ENABLE,
"DOB" DATE NOT NULL ENABLE,
"IS_MALE" NCHAR(1) DEFAULT 'T' NOT NULL ENABLE,
CONSTRAINT "TBL_PERSON_PK" PRIMARY KEY ("PERSON_ID")
)
Run Code Online (Sandbox Code Playgroud)
如您所见,PERSON_ID 字段包含表中每条记录的唯一 ROWID,并且是一个自动递增的主键。
(请不要挂断丢失的 SQL,除非它与 INDEXES 不工作的问题有关。我试图只从 DDL 中选择相关的 SQL,但可能遗漏了一些项目。那里有很多我没有的东西'认为与此问题无关,因此我尝试将其修剪掉)
我在表上创建了几个额外的非聚集索引。
CREATE INDEX "SYSTEM"."IDX_LAST_NAME" ON "SYSTEM"."TBL_PERSON" ("LAST_NAME")
CREATE INDEX "SYSTEM"."IDX_PERSON_NAME" ON "SYSTEM"."TBL_PERSON" ("FIRST_NAME", "LAST_NAME")
Run Code Online (Sandbox Code Playgroud)
当我在以下 SQL 上运行“解释计划”时,我得到通知,PK 索引已按预期使用。
select * from TBL_PERSON …
Run Code Online (Sandbox Code Playgroud) 我正在针对oracle数据库运行非常基本的选择(不确定版本)。
SELECT * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
Run Code Online (Sandbox Code Playgroud)
我只想返回最近的记录。所以我尝试了...
SELECT ROWNUM, * FROM ACCOUNTING WHERE ID = 123456 ORDER BY DATE
SELECT * FROM ACCOUNTING WHERE ID = 123456 AND ROWNUM < 2 ORDER BY DATE
Run Code Online (Sandbox Code Playgroud)
每次我得到相同的结果...
Error Source: System.Data.OracleClient
Error Message: ORA-00904: "ROWNUM" : invalid identifier
Run Code Online (Sandbox Code Playgroud)
我所看到和阅读的所有内容都表明这应该可行。谁能看到我所缺少的吗?驾驶员可能会遇到问题吗?我正在使用以下软件包...(Oracle ODAC 11.20.30 x64)
更新
感谢您的所有答复。对于为简化方案而做出的任何困惑,我深表歉意。ODAC驱动程序实际上是在对查询进行分解并为我格式化查询,因此我最初发布的内容并不完全是正在运行的查询...这是驱动程序随口吐出的东西,它会生成错误...
SELECT "ROWNUM", ID, SITE_ID, READING_DATE, SUBMITTED_DATE, DEPOSIT_DATE
FROM ACCOUNTING
WHERE (SITE_ID = 33730)
ORDER BY READING_DATE
Run Code Online (Sandbox Code Playgroud)
而对于我的第二次尝试...
SELECT ID, SITE_ID, READING_DATE, …
Run Code Online (Sandbox Code Playgroud) 我在下面粘贴了我的整个测试应用程序.它相当紧凑,所以我希望这不是问题.您应该能够简单地将其剪切并粘贴到控制台应用程序中并运行它.
我需要能够过滤任何一个或多个Person对象的属性,直到运行时我才知道哪一个.我知道这已经讨论了所有的地方,我已经调查过,并且我也使用了PredicateBuilder和Dynamic Linq Library等工具,但是他们的讨论倾向于更多地关注排序和排序,并且每个人都在努力解决他们的问题.面对Nullable类型时遇到的问题.所以我认为我会尝试至少构建一个可以解决这些特定情况的补充过滤器.
在下面的例子中,我试图过滤掉在某个特定日期之后出生的家庭成员.关键是被过滤对象上的DateOfBirth字段是DateTime属性.
我得到的最新错误是
类型'System.String'和'System.Nullable`1 [System.DateTime]'之间没有定义强制运算符.
这是问题所在.我曾尝试过几种不同的铸造和转换方法,但不同程度的失败.最终,这将适用于EF数据库,该数据库也在转换方法(例如DateTime.Parse( - ))上犹豫不决.
任何帮助都将不胜感激!
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
List<Person> people = new List<Person>();
people.Add(new Person { FirstName = "Bob", LastName = "Smith", DateOfBirth = DateTime.Parse("1969/01/21"), Weight=207 });
people.Add(new Person { FirstName = "Lisa", LastName = "Smith", DateOfBirth = DateTime.Parse("1974/05/09") });
people.Add(new Person { FirstName = "Jane", LastName …
Run Code Online (Sandbox Code Playgroud) 我希望能够确定传递的参数是否为 IEnumerable。
static bool TestForEnumerable(dynamic toTest)
{
return toTest is IEnumerable<Object>;
}
Run Code Online (Sandbox Code Playgroud)
我编写了以下控制台应用程序来调查我遇到的问题...
static void Main(string[] args)
{
Program _program = new Program();
Console.WriteLine("");
List<TestObject> toObj = new List<TestObject>
{
new TestObject { FirstName = "James", MiddleName = "Maitland", LastName = "Stewart", DOB = new DateTime(1908, 05, 20), IsFemale = false },
new TestObject { FirstName = "Gary", MiddleName = "James", LastName = "Cooper", DOB = new DateTime(1901, 05, 07), IsFemale = false },
new TestObject { FirstName = "Archibald", …
Run Code Online (Sandbox Code Playgroud) 我有一个服务对象,它只是对 Microsoft SQL 数据库之上的 EF Core 存储库执行查询。我正在尝试将这些同步方法转换为异步版本。这是一种简化方法的示例......
同步版本
public List<Contact> GetContacts()
{
var ret = this.dbContext.Contacts.ToList();
return ret;
}
Run Code Online (Sandbox Code Playgroud)
我已经看到了几种不创建异步方法的方法......再说一遍......我已经看到了几种不同的方法来说明你应该如何创建异步方法。我陷入了以下两种方法中的哪一种被认为是创建异步方法的“正确”或“最佳”方式之间。
异步版本 1
public Task<List<Contact>> GetContactsAsync()
{
return Task.FromResult(this.dbContext.Contacts.ToList());
}
Run Code Online (Sandbox Code Playgroud)
或者
异步版本 2
public async Task<List<Contact>> GetContactsAsync()
{
List<Contact> ret = null;
await Task.Run(()=>{
ret = this.dbContext.Contacts.ToList();
});
return ret;
}
Run Code Online (Sandbox Code Playgroud)
如果查询包含多行逻辑,则可能会使情况进一步复杂化。
这是包含更多细节的相同方法。如果您看到异步主题之外的问题,那么我很乐意在 PM 或其他内容中听到它们,但是对于这个线程,我想专注于等待/异步的东西。
完整的同步代码
public PaginationResult<Contact> GetContacts(PaginationSpec pagingSpec, List<Expression<Func<Models.Contact, bool>>> filter = null)
{
IQueryable<Contact> query = ContactService.GetContactQuery(this.ctx);
if (filter != null && filter.Count > 0)
{ …
Run Code Online (Sandbox Code Playgroud) c# ×3
.net-core ×2
oracle ×2
sql ×2
.net ×1
asp.net-mvc ×1
async-await ×1
asynchronous ×1
c#-4.0 ×1
dataprovider ×1
indexing ×1
lambda ×1
linq ×1
odac ×1
sql-server ×1