我发布ASP.NET Core 2应用程序并看到以下错误.
Error:
An assembly specified in the application dependencies manifest (MyApp.deps.json) was not found:
package: 'Microsoft.ApplicationInsights.AspNetCore', version: '2.1.1'
path: 'lib/netstandard1.6/Microsoft.ApplicationInsights.AspNetCore.dll'
This assembly was expected to be in the local runtime store as the application was published using the following target manifest files:
aspnetcore-store-2.0.0-linux-x64.xml;aspnetcore-store-2.0.0-osx-x64.xml;aspnetcore-store-2.0.0-win7-x64.xml;aspnetcore-store-2.0.0-win7-x86.xml
Run Code Online (Sandbox Code Playgroud)
我在Dev环境中没有看到这个错误.所以不确定出了什么问题.有想法该怎么解决这个吗?
更新
我安装了SDK(我只安装了运行时),一切都开始工作了.不确定这是否是最好的解决方案.
我正在研究项目,我需要设计DAL.我将Entity Framework用于大部分项目和Dapper一些对性能敏感的领域.
我正在考虑使用Repository模式,但是EF在某种意义上已经实现了这种模式.但是Dapper的情况并非如此.然后我想知道在我的DAL中混合存储库和服务模式是否有效?或者这会进入业务逻辑层?
我想要建立一个样本结构:
MyProjectName.Main
Views/
Controllers/
Infrastructure/
...
MyProjectName.DAL
DataService.EF/
fileName.cs
...
DataService.Dapper/
fileName.cs
...
Run Code Online (Sandbox Code Playgroud) 我正在研究ASP.NET MVC项目,并决定将一些功能提取到一个单独的类库项目(在同一个解决方案中).
我有些感动的元素<appSettings></appSettings>从Web.config主项目(我们称之为项目A),以App.config在类库项目(我们称之为项目B).我添加了对System.Configuration.dll的引用以访问项目B中的ConfigurationManager.
示例App.config文件用于项目B,如下所示.
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<appSettings>
<add key="Key1" value="Value1"/>
<add key="Key2" value="Value2"/>
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我按如下方式访问这些设置(在项目B中).
string key1 = ConfigurationManager.AppSettings["Key1"];
string key2 = ConfigurationManager.AppSettings["Key2"];
Run Code Online (Sandbox Code Playgroud)
我注意到了key1和key2返回的值ConfigurationManager是null.
在调试时,我看到项目A中ConfigurationManager原始的拉取值Web.config(另一<appsettings></appsettings>部分是我没有移动到项目B的部分)!
这对我没有任何意义.有人能告诉我我做错了什么,所以我可以访问App.config中的设置吗?
谢谢.
使用实体框架我从表中选择一些数据并使用循环迭代它foreach.我想知道以下示例中何时查询数据?
例1.
var countries = db.WorldCountries;
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}
Run Code Online (Sandbox Code Playgroud)
例2.
var countries = db.WorldCountries.Where(t => t.Country == "Country Name");
foreach(var item in countries)
{
Console.WriteLine("Country: {0}", item.Country);
}
Run Code Online (Sandbox Code Playgroud)
在第一个例子中,countries是DbSet<WorldCountries>在第二个例子中,countries是IQueryable<out WorldCountries>.
如果没有.ToList()上面的示例,如何检索数据?是否在foreach循环开始时检索整个数据集(就像.ToList()在第一次迭代开始时调用的那样),或者在循环的每次迭代中向数据库发出查询.
谢谢.
当一个类显式实现一个接口时,为什么需要将类实例显式地转换为接口才能使用已实现的方法?
(此示例取自此处:MSDN:显式接口实现)
您有两个接口,如下所示.
interface IControl
{
void Paint();
}
interface ISurface
{
void Paint();
}
Run Code Online (Sandbox Code Playgroud)
然后你明确地实现它们.
public class SampleClass : IControl, ISurface
{
void IControl.Paint()
{
System.Console.WriteLine("IControl.Paint");
}
void ISurface.Paint()
{
System.Console.WriteLine("ISurface.Paint");
}
}
Run Code Online (Sandbox Code Playgroud)
现在,要使用接口,您需要以下代码.
// Call the Paint methods from Main.
SampleClass obj = new SampleClass();
//obj.Paint(); // Compiler error.
IControl c = (IControl)obj;
c.Paint(); // Calls IControl.Paint on SampleClass.
ISurface s = (ISurface)obj;
s.Paint(); // Calls ISurface.Paint on SampleClass.
Run Code Online (Sandbox Code Playgroud)
在上面的代码块中,为什么你有
IControl c = (IControl)obj; …Run Code Online (Sandbox Code Playgroud) 使用AutoMapper时出现以下错误
程序集"AutoMapper.Proxies,Version = 0.0.0.0,Culture = neutral,PublicKeyToken = be96cd2c38ef1005"中的"代理"类型中的方法"GetEnumerator"没有实现.
在我的存储库中,我有一个私有方法
private IMapper GetMapper()
{
var config = new MapperConfiguration(cfg => {
cfg.CreateMap<MyClass, PersistenceModels.MyClass>();
cfg.CreateMap<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>();
});
return new Mapper(config);
}
Run Code Online (Sandbox Code Playgroud)
然后我用这个如下
var mapper = GetMapper();
var userInfo = mapper.Map<IEnumerable<PersistenceModels.MyClass>, IEnumerable<MyClass>>(userInfoRaw);
Run Code Online (Sandbox Code Playgroud)
的MyClass类型是相同的,并且具有一个IEnumerable属性
public IEnumerable<string> ImageUris { get; set; }
Run Code Online (Sandbox Code Playgroud)
任何想法如何解决这个问题?
编辑
我不是接口定义的映射类型,我是映射具体类型的集合,因此是IEnumerable接口.
我与外键有一对一的关系,但由于Cascade Delete某种原因没有启用.示例代码如下.
public class AppRegistration
{
public int AppRegistrationId { get; set; }
[Required]
[StringLength(50)]
[Display(Name = "Username")]
public string UserName { get; set; }
[Required]
[StringLength(100)]
public string Password { get; set; }
[StringLength(20)]
public string StudentOrAgent { get; set; }
// navigation properties
public virtual AppStatus AppStatus { get; set; }
public virtual Agreement Agreement { get; set; }
public virtual AnotherTable AnotherTable { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
具有外键的从属表如下.
public class Agreement
{
[Key]
[ForeignKey("AppRegistration")]
public …Run Code Online (Sandbox Code Playgroud) 使用Linq to Entities以下是否有区别?
db.EntityName.Where(a => a.Id == id).FirstOrDefault();
db.EntityName.FirstOrDefault(a => a.Id == id);
Run Code Online (Sandbox Code Playgroud)
或者仅仅是个人偏好的问题?
谢谢.
我正在使用Dapper从StoredProcedure检索SQL Server中的数据,我收到错误
Specified cast is not valid.
和细节:
Error parsing column 4 (SubTotal=0.00 - Decimal)
在SQL Server端,列SubTotal是decimal(18, 2) NULLABLE在.NET端,而在.NET端decimal?.正在检索的数据是0.00.
我检查了这个答案:Dapper,十进制加倍?解析列X时出错
根据答案,我换了
il.Emit(OpCodes.Ldtoken, unboxType);
同
il.Emit(OpCodes.Ldtoken, Nullable.GetUnderlyingType(unboxType) ?? unboxType);
在2360行仍然得到相同的错误.
任何人对此都有任何想法?谢谢.
更新:
我试过让列不可为空.还尝试将列更改为float(在SQL Server上)和double(在.NET端).这些都没有奏效,我得到了同样的错误.然后我将列更改为int现在代码工作正常.但是,我正在使用货币值,并希望使用浮点数.将进一步调查......
我正在执行如下存储过程
var transaction = this.db.Query<PaymentTransactions>("usp_PaymentTransactionsGetSingleIfPaid", new { registrationId }, commandType: CommandType.StoredProcedure);
返回信息的存储过程的相关部分如下所示.
SELECT * FROM PaymentTransactions WHERE RegistrationId = @registrationId AND TransactionStatus = 'SUCCESS';
更新2:
Dapper工作正常.也许我的开发环境出了问题.所需要的只是VS重启.
在dbo.AspNetUsersASP.NET Core Identity使用的表中,该Id列的定义如下nvarchar(450)图所示。
因为Guids存储在此列中,这是什么原因?如果我要创建一个引用此Id列的外键,我真的不想使列不必要地变大。还是有一种情况Id需要使用此大小的列?