在AutoMapper 2.0中,我使用Profiles来配置我的映射.我使用SourceMemberNameTransformer和DestinationMemberNameTransformer匹配我的源和目标属性名称.
在2.1.265中,这些属性不再出现在Profile上.有谁知道他们被删除的原因?但更重要的是,我如何复制此功能.
编辑
我一直在寻找的SourceMemberNamingConvention和DestinationMemberNamingConvention,但我无法找到任何文件为如何将这些工作.有没有人有使用自定义的经验INamingConvention?
编辑2
源成员是从第三方数据库生成的.通常,它们使用所有小写列名称和单词之间的下划线.有时他们会忽略下划线,有时他们会随意大写.
目标成员尝试尽可能遵循.NET命名约定.删除了下划线,下划线后面的第一个字符大写.进行了其他案例更改以使成员名称更易于阅读.
为了解决这个问题,我订了
SourceMemberNameTransformer = name => name.Replace("_", "").ToUpper()
DestinationMemberNameTransformer = name => name.ToUpper()
Run Code Online (Sandbox Code Playgroud)
编辑3
为来自未来的人们提供更多信息.
我检查了消息来源,看看INamingConvention是如何使用的.它的设计方式有点误导.界面定义为
public interface INamingConvention
{
Regex SplittingExpression { get; }
string SeparatorCharacter { get; }
}
Run Code Online (Sandbox Code Playgroud)
但是,AutoMapper不会为两者SourceMemberNamingConvention和用户提供接口的完整定义DestinationMemberNamingConvention
它采用目标类型的每个成员并应用DestinationMemberNamingConvention.SplittingExpression.然后,它需要的匹配部分,并呼吁string.Join使用SourceMemberNamingConvention.SeparatorCharacter.然后,它尝试将源类型成员与目标类型成员进行匹配.
这是一个非常高级别的概述,它的作用是什么,而不是试图描述完整的功能.它仅仅是为了展示如何INamingConvention使用和显示它SourceMemberNamingConvention.SplittingExpression并且DestinationMemberNamingConvention.SeparatorCharacter从未使用过.
如果您无法使用此策略转换目标成员,则必须手动将属性映射为nemesv的答案建议.
我在两台服务器上有两个数据库.我的应用程序主要在server1上使用db1.但是,有一个表我只会在server2上的db2中读取.
我们创建了一个链接服务器,并在db1中为该表设置了一个同义词,而不是为db2创建一个新的DbContext.我在db1 Code First Context中为此设置了映射.这似乎工作,我可以检索数据.
但是,如果我在谓词中使用任何日期,则会收到以下错误:
A failure occurred while giving parameter information to OLE DB provider "SQLNCLI10" for linked server "server2".
我的映射看起来像这样:
ToTable("synonym");
Property(t => t.Id).HasColumnName("ID");
Property(t => t.Company).HasColumnName("Company");
Property(t => t.StartDate).HasColumnName("StartDate");
Property(t => t.EndDate).HasColumnName("EndDate");
Property(t => t.LastUpdatedDate).HasColumnName("LastUpdatedDate");
Property(t => t.LastUpdatedBy).HasColumnName("LastUpdatedBy");
Run Code Online (Sandbox Code Playgroud)
我正在尝试运行以下查询:
_context.Set<Synonym>()
.Any(s => s.Company == company
&& s.StartDate <= date
&& (s.EndDate >= date || s.EndDate == null));
Run Code Online (Sandbox Code Playgroud)
如果我删除日期,查询运行正常.
server1是SQL 2008
server2是SQL 2005
我发现这个帖子表明日期存在某种问题,但我无法弄清楚如何将其应用于Entity Framework.
我正在尝试将 Apache CLI 用于我的一个应用程序,该应用程序具有必需的参数和选项。对于所需的参数,我不想有任何选项说明符(没有连字符)。所以我正在寻找这样的东西
application requiredArgument, -opt1 optionalArg1, -opt2 optionalArg2
Run Code Online (Sandbox Code Playgroud)
有什么办法可以实现这一点吗?或者还有其他可以使用的解析器吗?
我有这个我正在使用的代码块:
// get the collection of librarys from the injected repository
librarySearchResults = _librarySearchRepository.GetLibraries(searchTerm);
// map the collection into a collection of LibrarySearchResultsViewModel view models
libraryModel.LibrarySearchResults =
librarySearchResults.Select(
library =>
new LibrarySearchResultsViewModel
{
Name = library.Name,
Consortium = library.Consortium,
Distance = library.Distance,
NavigateUrl = _librarySearchRepository.GetUrlFromBranchId(library.BranchID),
BranchID = library.BranchID
}).ToList();
Run Code Online (Sandbox Code Playgroud)
所有这一切都是取结果GetLibraries(searchTerm),返回一个LibrarySearchResult对象列表,并将它们映射到一个列表LibrarySearchResultsViewModel.
虽然这适用于小型结果集,但一旦我进入1000,它真的开始拖动,在完成转换之前大约需要12秒.
我的问题 :
由于我在这里使用分页,我实际上只需要显示在大型结果集中返回的一小部分数据.有没有利用类似的方式Take()或者GetRange(),这样的转换仅发生于我需要显示的记录?在1,000条记录中,我只想获取20到40条记录,并将它们转换为视图模型.
我也是关于改进或重构此代码的任何建议.
我之前使用Stored Procs进行了大量的开发来进行所有数据修改.
但我现在需要使用LINQ To SQL,而基本的基本任务让我感到难过.
我有一个名为Book(Title,Author等)的课程.许多书籍被实例化并添加到公共ObservableCollection书籍中
到目前为止一切顺利,我可以看到它在其藏品中保存了有效的书籍.
我有一个函数DeleteOldestBook(),它只是获取书籍中的第一本书,并删除.这是我遇到麻烦的地方.
我尝试选择
Book BookToDelete = Books.Take(1) as Book;
Run Code Online (Sandbox Code Playgroud)
但它总是返回NULL.
我做了一个hacky解决方法:
var AllBooks = from BookToDelete in Books select BookToDelete;
foreach (Book BookToDelete in AllBooks)
{
// BookToDelete.dostuff takes place ...
break; // only do 1
}
Run Code Online (Sandbox Code Playgroud)
但这太糟糕了,我知道我错过了一些简单的东西.
LINQ专家的任何想法?如果您需要更多代码,请告诉我们.
提前致谢
我有一个过程,需要绕过输入为null的WHERE子句.
请找到以下条件.
CREATE PROCEDURE [dbo].[spPERSON_SELECT]
(
@PersonID INT = NULL,
@OrganizationID INT = NULL,
@ManagerID INT = NULL
)
AS
BEGIN
SELECT PERSON.name, ORGANIZATION.name,PERSON.manager
FROM PERSON
INNER JOIN ORGANIZATION
ON PERSON.person_id = ORGANIZATION.person_id
WHERE PERSON.person_id = @PersonID
and ORGANIZATION.organization_id = @OrganizationID
and PERSON.manager_id = @ManagerID
END
GO
Run Code Online (Sandbox Code Playgroud)
Iam面临一个问题,而输入为null,在这种情况下需要避免where条件.
例:
如果@PersonID为null,那么我的select查询需要以下结构:
SELECT PERSON.name, ORGANIZATION.name,PERSON.manager
FROM PERSON
INNER JOIN ORGANIZATION
ON PERSON.person_id = ORGANIZATION.person_id
WHERE ORGANIZATION.organization_id = @OrganizationID
and PERSON.manager_id = @ManagerID
Run Code Online (Sandbox Code Playgroud)
我想避免动态查询.
我有一个像下面给出的类/结构
public class FileDetails {public FileDetails(){}
Run Code Online (Sandbox Code Playgroud)public PrintFile PrintFileDetails { get; set; } public Boolean IsSelected { get; set; } public DateTime UploadTime { get; set; } public long FileSize { get; set; } public UploadTypes TypeOfUpload { get; set; } public DateTime DownloadStartTime {get;set;} public DateTime DownloadEndTime {get;set;} public bool ShouldDownload{get;set;} }
在上面的片段PrintFile中定义了XSD.我打算在一个内部部署这个结构ObservableConnection.如果我实施NotifypropertychangedFileDetails将下面的项目PrintFileDetails也能够获益INotifypropertychanged.我相信我无法实现,INotifyPropertyChanged因为它与其他程序员共享.
我想知道你是否知道如何在做调度程序时每3天做一次差异.
SELECT DISTINCT
CLAIM_NO,
ModifiedBy,
ClaimType,
ClaimStatus,
EmailAddress,
FROM EP_ADMIN_ITEM_REMINDER
WHERE Status = 1 AND DATEDIFF(Day,DateAdded,getdate()) = 3
Run Code Online (Sandbox Code Playgroud)
这是我在DATEDIFF中的代码我放入WHERE子句我有2列为date 1st DateAdded 2nd DateSent.我需要每3天安排一次我的事情,所以它会先更新datesent,它会检查datesent是否为Greterthan dateadded为3.我只想知道我的WHERE条款是否正确.谢谢
我正在研究WPF,我想改变背景---文本框的颜色(txtStatus.Background = white),但是它给出了ERROR.我的代码是:
public Window2()
{
InitializeComponent();
txtStatus.Text = "Current Operation: NULL";
txtStatus.Background= white
}
Run Code Online (Sandbox Code Playgroud) 我有以下代码:
public static void PrependEntitiesToFile(string pathToFile)
{
char[] buffer = new char[10000];
FileInfo file = new FileInfo(pathToFile);
string renamedFile = file.FullName + ".orig";
System.IO.File.Move(file.FullName, renamedFile);
using (StreamReader sr = new StreamReader(renamedFile))
using (StreamWriter sw = new StreamWriter(file.FullName, false))
{
string entityDeclaration = "foo";
sw.Write(entityDeclaration);
string strFileContents = string.Empty;
int read;
while ((read = sr.Read(buffer, 0, buffer.Length)) > 0)
{
for (int i = 0; i < buffer.Length; i++)
{
strFileContents += buffer[i].ToString();
}
}
sw.Write(strFileContents, 0, strFileContents.Length);
}
System.IO.File.Delete(renamedFile);
} …Run Code Online (Sandbox Code Playgroud) 有没有办法在运行时在c#中创建对象?
为简单起见,假设以下问题..如果我有这个类..
class student {
string name;
int ID;}
Run Code Online (Sandbox Code Playgroud)
假设我正在编写一个程序,从用户那里获取学生人数(例如15),然后程序应该从学生班创建15个对象,并要求用户填写每个学生的姓名和ID.
我想知道的是如何在运行时创建对象?
问题是:在这段代码的末尾,ptArray [0] .X的值是3.33还是1.11?
谢谢.
class MyPoint
{
public double X, Y;
public MyPoint(double x, double y)
{
X = x;
Y = y;
}
}
MyPoint[] ptArray = new MyPoint[2];
ptArray[0] = new MyPoint(1.11, 2.22);
MyPoint first = ptArray[0];
// Am I changing ptArray[0] here or not?
first.X = 3.33;
first.Y = 4.44;
Run Code Online (Sandbox Code Playgroud) c# ×8
.net ×4
sql-server ×3
linq ×2
sql ×2
apache ×1
automapper ×1
linq-to-sql ×1
object ×1
runtime ×1
vb.net ×1
wpf ×1