ConnectionStrings和一些其他设置(<appSettings> <add key...).Web.configApp.configWeb应用程序使用工厂模式直接注入读取数据提供者.
在web.config我有密钥告诉我将使用哪个DLL(提供程序)来检索我的数据.
我可以有多个提供程序(每个DLL将是MS SQL,MySQL的提供程序,或从某些SOA服务获取数据).
每个DLL都有自己的名称(ID和名称空间),并且需要拥有自己的配置(dataconnections,service urls等...),第一个想法就是写入
app.config.
#1 - 网站正在运行(运行时)我需要更改数据提供者,我该怎么做?不知何故,写入的默认值Web.config将被更改.
.
#2 - 每个数据提供者都有自定义配置,而App.Config文件不适用于dll程序集,只能用于可执行文件.这意味着我需要在我的Web.Config上编写(我不喜欢这个选项,因为我再次在运行时更新我的web.config).我该怎么解决这个问题?
DLL和DLL.config每每个供应商.并且在运行时期间我可能需要更改此配置值..
简而言之,我使用MVC 5.2.3(包含所有更新的JS框架)开始了一个新项目,期望我从MVC 2获得的验证中遇到的许多问题都得到了解决,我有多么错误.
基本上我疯狂地试图提供验证DateTime和Decimal.
使用十进制字段,使用EN和DE(文化)中的浏览器,我遇到了逗号和点(十进制除法)以及我正在设置的范围的问题.
随着DateTime我甚至尝试了一个DisplayFormat只是显示日期而不是时间,无论如何,日/月/年的顺序与分离.或/或-只是失败.
例子:
这同样适用于日期时间显示格式和类似的JS验证....
我和你们分享我现在拥有的东西:
的TestObject
public class TestObject
{
....
[Display(Name = "D2", ResourceType = typeof(WebApplication1.Models.Res.TestObject))]
[Range(0, 999.9999)]
public decimal? D1 { get; set; }
// On DBContext I have defined the range/precision
// modelBuilder.Entity<TestObject>().Property(x => x.D2).HasPrecision(7, 4);
[Display(Name …Run Code Online (Sandbox Code Playgroud) 在我的Windows类库(由MVC网站使用)中,我安装了NugetPackage Microsoft.SqlServer.Types (Spatial).
现在,使用ado.net我试图通过执行以下操作来读取值:
protected SqlGeography MapSqlGeography(DbDataReader reader, string key)
{
return reader[key] is DBNull ? null : (SqlGeography)reader[key];
}
Run Code Online (Sandbox Code Playgroud)
如果我在此行中添加制动点并在visual studio观察窗口中输入:"reader [key]",我可以看到正确的Point(XXXX,XXX)类型:" object {Microsoft.SqlServer.Types.SqlGeography}"
但是,一旦我尝试进行演员,我就会出现以下错误:
(SqlGeography)reader[key] The type 'Microsoft.SqlServer.Types.SqlGeography' exists in both
'Microsoft.SqlServer.Types.dll' and
'Microsoft.SqlServer.Types.dll'
Run Code Online (Sandbox Code Playgroud)
主要的奇怪事实是dll完全一样......
据我所知,这个命名空间/类名只有一个"源",它不应该重复....
我的"使用"是:
using Microsoft.SqlServer.Types;
using System;
using System.Collections.Generic;
using System.Data.Common;
using System.Data.SqlClient;
using System.Threading.Tasks;
Run Code Online (Sandbox Code Playgroud)
关于如何解决这个问题的任何想法?谢谢.
更新#1
我卸载了NugetPackage`Microsoft.SqlServer.Types(Spatial)',而是尝试了一个名为:'Microsoft.SqlServer.Types(Unofficial)',甚至在清理了所有以前的文件夹/文件并清理了"bin/obj"之后",我仍然有完全相同的例外......
我现在只是看到了这个原因......任何想法都会非常感激.
更新#2
刚试过用 extern alias destination;
return reader[key] is DBNull
? null
: (destination.Microsoft.SqlServer.Types.SqlGeography)reader[key];
Run Code Online (Sandbox Code Playgroud)
有例外:
Cannot cast 'reader[key]' (which has an actual type of …Run Code Online (Sandbox Code Playgroud) 使用OpenPop连接到Gmail时,我只能检索一次电子邮件,即使我不删除它也是如此.使用GetMessageCount()我总是收到0封电子邮件.我怎样才能收到那里的所有电子邮件?
只有在阅读并处理它们之后,我才能下令删除.我使用以下代码来获取电子邮件:
using (var client = new Pop3Client())
{
// Connect to the server
client.Connect(serverData.Hostname, serverData.Port, serverData.UseSsl);
// Authenticate ourselves towards the server
client.Authenticate(serverData.Username, serverData.Password, AuthenticationMethod.UsernameAndPassword);
var emailAmount = client.GetMessageSizes().Count;
// Fetch all the current uids seen
var msgCount = client.GetMessageCount();
.....
}
Run Code Online (Sandbox Code Playgroud) 有类似的东西:
SELECT (SELECT COUNT(*) from Table1),(SELECT COUNT(*) from Table2 )
Run Code Online (Sandbox Code Playgroud)
如何在linq中编写它?还是简单不可能?
限制:
只能打一次数据库:
var result = new {
Sum1 = db.Table1.Count(),
Sum2 = db.Table2.Count()
}); // is not valid.....
Run Code Online (Sandbox Code Playgroud)我不想使用类似的东西(使用"帮助"表):
var result = (from t3 in db.Table3
select new {
Sum1 = db.Table1.Count(),
Sum2 = db.Table2.Count()
}).firstOrDefault();
//In order to get only the first row
//but it will not return nothing if the table 3 has no entries......
Run Code Online (Sandbox Code Playgroud)不使用 db.Database.ExecuteSqlCommand
从代码中我们如何知道一个类实现哪些接口?
例:
interface IDrink
interface IEat
class Milk : IDrink
class Water: IDrink
class Potato: IEat
Run Code Online (Sandbox Code Playgroud)
我想知道Potato是否实现了IDrink.我该怎么做?
.
使用此:
我有一个接收一个" object myObject"的方法,我需要看看是否将它转换为IDrink或IEat.
我有一个带有泛型的抽象基类,我将针对这个问题简化它:
public abstract class DBBaseTable<T>
{
public T Id { get; set; }
public byte[] RowVersion { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
现在,我可以有这样的课程:Person : DBBaseTable<int>或Animal: DBBaseTable<Guid>
我试图避免反射,以便在我根本不知道T类型的代码的一部分中访问属性 RowVersion 。
var memberInfo = oldObject.GetType().BaseType;
if (memberInfo != null
&& memberInfo.IsGenericType
&& memberInfo.GetGenericTypeDefinition() == typeof(DBBaseTable<>)
)
{
var isCorrectRowVersion = (oldObject as DBBaseTable<object>).RowVersion ==
(objToUpdate as DBBaseTable<object>).RowVersion;
//TODO....
}
Run Code Online (Sandbox Code Playgroud)
条件 IF 条件工作正常......但是当我尝试使用as运算符时,我总是需要指定T类型......我尝试使用“对象”但它不起作用......我根本不知道我是在处理 int、guid 还是其他类型的......
我知道如何通过反射解决这个问题,但我想知道是否有替代方案?
我正在构建一个信息块,最终将其转换为字节数组。我想知道是否可以将其转换为图像?
我知道它最终不会“显示任何东西”有意义,这将是一个更抽象的结果,而这正是我正在寻找的。
我已经尝试过以下代码,但它返回异常...:
public Image byteArrayToImage(byte[] byteArrayIn)
{
MemoryStream ms = new MemoryStream(byteArrayIn);
Image returnImage = Image.FromStream(ms);
return returnImage;
}
Run Code Online (Sandbox Code Playgroud)
我该怎么做?
我有以下代码:
var rawGroupBEFORE = sqlRaw.GroupBy(x => new
{
x.ID,
x.P1,
x.P2,
x.P3,
x.P4,
x.P5,
x.P6,
x.P7,
x.P8,
}).ToList();
var rawGroup = sqlRaw.GroupBy(x => new RawDocument
{
Id = x.ID,
P1 = x.P1,
P2 = x.P2,
P3 = x.P3,
P4 = x.P4,
P5 = x.P5,
P6 = x.P6,
P7 = x.P7,
P8 = x.P8,
}).ToList();
Run Code Online (Sandbox Code Playgroud)
结果是我在rawGroupBEFORE1 元素中拥有的数据。在rawGroup给我 2 个元素 ..... 错误的分组。我已经使用自动 Visual Studio“创建缺少的属性”操作创建了类 RawDocument。
任何想法为什么我应该得到这种行为?
我正在尝试编写以实现以下查询的逻辑:
select ......
from (select ..... from ... complex and long query #1) R1
(select ..... from ... complex and long query #2) R2
Where
NOT ( @DateStart > R2.IstEnde OR @DateEnd <= R2.IstStart)
OR
(
(select count(*)
from R2 // <---- BUG IS HERE
Where R2.IsOutsideTaskTimeFrame = 1 AND R2.IsManuallyFixed = 1
) > 0
)
order BY R2.PersonName, R1.YearOfWeek, R1.Week
Run Code Online (Sandbox Code Playgroud)
哪个显然不起作用,因为我试图在"count()"条件中"重用"R2.
我是根据".NET Linq"逻辑编写的,我们可以"重用"以前的查询.
我是否可以编写"重用"前一个查询而不再重复它的逻辑?
有以下内容:
public List<int> List1 { get; set; }
...
var x = GiveMeObject(); // x.List2 --> each element on list2 has an Id (int).
...
bool containsAtLeastOne = ???
Run Code Online (Sandbox Code Playgroud)
什么是最简单/最快/最短的方式(在linq中)验证list1中是否至少有1个list1元素?
谢谢
我想重构以下两行代码:
var myDbObject = service.GetObj(id);
name = myDbObject != null ? myDbObject.Name : "No name";
Run Code Online (Sandbox Code Playgroud)
如何避免使用辅助变量"myDbObject"?
我只用一行代码就可以做到这一点吗?
LINQ还有什么方法可以实现这个目的吗?
我不看的解决方案:
c# ×11
linq ×4
asp.net ×3
.net ×2
sql-server ×2
app-config ×1
asp.net-mvc ×1
generics ×1
image ×1
list ×1
openpop ×1
validation ×1
web-config ×1