小编Oce*_*t20的帖子

SQLMetal Multiple Foreign Keys Pointing to One Table Issue

Edit - Cleaning up question to better reflect the actual issue:

我正在使用SQLMetal从我们的SQL Server数据库生成数据库类.最近,我需要添加一个表,其中有多个外键指向同一个表.使用LINQPad来使用新表,我能够访问两个外键的属性,如下所示:

  • record.FK_AId
  • record.FK_BId
  • record.FKA
  • record.FKB

......这就是我期待它的方式.问题是,SQLMetal生成的类产生以下属性:

  • record.FK_AId
  • record.FK_BId
  • record.FKA
  • record.FKBTableNameGoesHere

现在我可以只生成生成的类,因此FKBTableNameGoesHere将是FK_B,但生成的文件经常被不同的团队成员更改,因此这将是一个巨大的痛苦.这有一个简单的解决方案吗?

提前致谢.

编辑2 所以,我认为解决方案是创建一个具有名为我想要的属性的部分类,并让getter/setter指向命名不佳的属性.这有助于选择,但不能在where子句中使用它.任何人都有解决方案?

sqlmetal .net-4.0 linq-to-sql

7
推荐指数
1
解决办法
1091
查看次数

实体框架达到2100参数限制

我正在将一些代码从LINQ-to-SQL迁移到Entity Framework.以前,当对从SQL Server(描述一个2100参数限制跑到这里),我用由Marc Gravell提供的解决方案在这里.正如他自己的回复中所述,它不适用于实体框架.

我对表达式完全没有经验,知道从哪里开始,但我正在寻找的本质上是相同的扩展方法,但适用于实体框架.提前感谢您提供的任何帮助.

sql linq parameters entity-framework expression-trees

7
推荐指数
1
解决办法
5733
查看次数

返回Enumerable.Empty <T>().AsQueryable()一个坏主意?

最好用一些代码解释这个:

public IQueryable<DatabaseRecord> GetQueryableLinkedRecords()
{
    if(this.currentlyHeldIds.Count() == 0)
    {
        return Enumerable.Empty<DatabaseRecord>().AsQueryable();
    }
    else
    {
        return from r in this.DBContext.DatabaseRecords
               where this.currentlyHeldIds.Contains(r.Id)
               select r;
    }
}
Run Code Online (Sandbox Code Playgroud)

这个想法是,如果没有查询当前的HelloId,则没有理由再次实际查询数据库.如果currentHeldIds没有值,LINQ to SQL仍将查询db.这种方法有什么问题吗?我意识到还有一些其他问题与返回IQueryable一般有关,但抛开那些论点,试图绕过这样的db调用有什么不对吗?

.net c# linq iqueryable linq-to-sql

6
推荐指数
1
解决办法
1022
查看次数

EF Code First:可以转换为SQL的方法

我正在寻找一种方法来创建一个可以在我的Linq查询中使用的函数,该函数将转换为SQL.回到我们使用Linq-to-SQL时,我提出了类似的问题.答案是映射到数据库中的UDF.我们正在使用代码优先模型,因为模型定义的清晰度,但遗憾的是没有办法定义函数,映射到函数,并映射到存储过程,据我所知(我想这个代码的想法首先应该生成db,我不应该向它添加内容).对我来说似乎不具备可扩展性,因为它不允许使用简单的方法来处理可能随着时间推移而发展的低效率,但这既不是在这里也不是......

无论如何,我知道我可以定义谓词表达式,它将转换为我可以在我的查询中使用的SQL,如下所示:

public static Expression<Func<MyEntity, bool>> FilterMe(int comparisonNumber)
{
    return x => x.SomeProperty == comparisonNumber;
}

var query = MyEntities.Where(FilterMe(1));
Run Code Online (Sandbox Code Playgroud)

这仅适用于返回的表达式bool吗?我正在寻找以下内容:

var query = from m in MyEntities
            let endDate = GetEndDate(m.Start, m.Duration)
            where endDate <= DateTime.Now
            select m;
Run Code Online (Sandbox Code Playgroud)

有没有办法构建GetEndDate表达式函数?GetEndDate当我在查询中长时间编写它时,内部代码转换为SQL就好了,但它很长并且令人困惑.

编辑 - 哦,在有人回答"使用SQLFunctions for DateAdd"之前,我的例子就是那个例子.我还有无数其他方法可以使用它.提前致谢.

.net linq entity-framework expression-trees ef-code-first

6
推荐指数
1
解决办法
663
查看次数

WCF REST:我希望我的XML在请求中看起来像什么?

我的WCF服务中有以下方法:

[OperationContract]
[WebInvoke(Method = "POST", BodyStyle = WebMessageBodyStyle.Bare, ResponseFormat = WebMessageFormat.Xml, RequestFormat = WebMessageFormat.Xml)]
public int GetOne(string param1, string param2)
{
    return 1;
}
Run Code Online (Sandbox Code Playgroud)

我从Flex应用程序发送xml,它需要一个如下所示的对象:{ param1: "test", param2: "test2" }并将其转换为以下请求:

POST http://localhost:8012/MyService.svc/GetOne HTTP/1.1
Accept: application/xml
Accept-Language: en-US
x-flash-version: 10,1,53,64
Content-Type: application/xml
Content-Length: 52
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)
Host: localhost:8012
Connection: Keep-Alive
Pragma: no-cache
Cookie: ASP.NET_SessionId=drsynacw0ignepk4ya4pou23

<param1>something</param1><param2>something</param2>
Run Code Online (Sandbox Code Playgroud)

我收到了错误The incoming message has an unexpected message format 'Raw'. The expected message …

c# apache-flex asp.net wcf wcf-rest

6
推荐指数
1
解决办法
6016
查看次数

RegisterClientScriptInclude:"type"参数有什么作用?

我目前正在调查RegisterClientScriptInclude方法,所以我可以确定我不会在一个页面上执行两次包含JQuery的操作.Microsoft文档说明:

RegisterClientScriptInclude方法的这种重载采用key和url参数来标识脚本,以及一个类型参数来指定客户端脚本include的标识.您可以根据将要访问资源的对象指定类型.例如,使用Page实例访问资源时,可以指定Page类型.

我不知道它实际上对我有什么影响.它是否只是以某种方式识别哪个页面/控件优先并注册了包含?有人可以解释为什么我想要提供除键/ url之外的类型?提前致谢.

javascript c# asp.net server-side-includes

5
推荐指数
1
解决办法
629
查看次数

EF Code First从IQueryable <T>中删除批次?

我知道这在LINQ-to-SQL中是可行的,而且我已经看到了点点滴滴让我相信它在EF中是可能的.是否有扩展可以做这样的事情:

var peopleQuery = Context.People.Where(p => p.Name == "Jim");

peopleQuery.DeleteBatch();
Run Code Online (Sandbox Code Playgroud)

DeleteBatch刚采分开peopleQuery并创建一个SQL语句删除所有相应的记录,然后执行查询,而不是直接将标记为删除所有的单位和有它由一个做他们的一个.我以为我在下面的代码中找到了类似的东西,但它立即失败,因为实例无法转换为ObjectSet.有谁知道如何解决这个问题与EF Code First一起使用?或者知道在哪里有这样做的例子?

public static IQueryable<T> DeleteBatch<T>(this IQueryable<T> instance) where T : class
{
    ObjectSet<T> query = instance as ObjectSet<T>;
    ObjectContext context = query.Context;

    string sqlClause = GetClause<T>(instance);
    context.ExecuteStoreCommand("DELETE {0}", sqlClause);

    return instance;
}

public static string GetClause<T>(this IQueryable<T> clause) where T : class
{
    string snippet = "FROM [dbo].[";

    string sql = ((ObjectQuery<T>)clause).ToTraceString();
    string sqlFirstPart = sql.Substring(sql.IndexOf(snippet));

    sqlFirstPart = sqlFirstPart.Replace("AS [Extent1]", "");
    sqlFirstPart = sqlFirstPart.Replace("[Extent1].", "");

    return …
Run Code Online (Sandbox Code Playgroud)

.net sql extension-methods entity-framework ef-code-first

5
推荐指数
1
解决办法
2024
查看次数

如何限制CTE递归深度但选择通用表?

目前,我们有一个存储过程,通过执行以下操作,从其原始模式中的表返回数据:

WITH CTE AS
(
    -- Start CTE off by selecting the id that was provided to stored procedure.
    SELECT *
    FROM [dbo].[TestTable]
    WHERE [Id] = 1
    -- Recursively add tasks that are children of records already found in previous iterations.
    UNION ALL
    SELECT t.*
    FROM [dbo].[TestTable] as t
    INNER JOIN CTE as tcte
        ON t.[ParentId] = tcte.[Id]
)           
SELECT *
FROM CTE
Run Code Online (Sandbox Code Playgroud)

这很好,因为无论表架构如何更改,只要有[Id]和[ParentId]列,我就不必更新此存储过程.我想做类似的事情,但也能够动态指定递归的深度.我看到这样做的唯一方法是添加一个Level/Depth标识符,如下所示:

WITH CTE AS
(
    -- Start CTE off by selecting the task that was provided to …
Run Code Online (Sandbox Code Playgroud)

sql sql-server sql-server-2005 common-table-expression

5
推荐指数
1
解决办法
7341
查看次数

EF Code First 4.3 DbContext生命周期?

我已经搜索过,但在这个主题上找不到多少.有没有人看过DBContext的简明"操作顺序",包括实例化,验证,保存等等?我主要是好奇,因为在使用我的EF 4.3 Code First上下文的LINQPad时,它会在我自己的任何一个之前运行两个查询.一个与迁移历史有关,我理解是因为我们正在使用EF迁移,它正在尝试查看是否需要自动更新,而另一个是EdmMetadata表,我不明白,因为它听起来像是如果我们使用EFMigrations,则没有必要.

我对于调用一个查询的原因缺乏理解,这让我想知道DBContext的生命周期的其他部分是否我不知道可能对理解/覆盖有用.提前致谢!

entity-framework ef-code-first dbcontext ef-migrations entity-framework-4.3

5
推荐指数
1
解决办法
1148
查看次数

有什么方法可以禁用特定项目/名称空间/任何东西的智能感知吗?

除了在所有Visual Studio中禁用智能感知之外,是否可以在任何级别进行此操作?只是想确认/否认对其在某些过大的项目/解决方案中的性能的怀疑,同时将其保留在我们真正关心的其他领域。

.net c# intellisense visual-studio visual-studio-2012

5
推荐指数
1
解决办法
2143
查看次数