小编Pet*_*ack的帖子

LINQ-TO-SQL Refresh()在某些外部数据库更新(如ExecuteCommand())后不更新对象的关联

假设我有一个名为Department的实体,我是从MyDataContext检索的.部门有一个名为Employees的协会.

我想在一个部门添加一堆新员工.而不是使用LINQ,这将导致多个查询,我做一个批量插入:

MyDataContext.ExcecuteCommand(
"Insert INTO Employee (DeptID, etc…), (DeptID, etc…), (DeptID, etc…)"
);
Run Code Online (Sandbox Code Playgroud)

现在我的Department对象对这些更改一无所知,特别是Employees属性,因为Department.Employees.Count()返回0

我已经尝试了以下两种方法来刷新以更新部门及其相关的员工:

MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department);
MyDataContext.Refresh(RefreshMode.OverwriteCurrentValues, Department.Employees);
Run Code Online (Sandbox Code Playgroud)

但仍然是Department.Employees.Count()返回0

我知道数据实际上已正确添加,因为如果我创建一个新的DataContext并获取Department实体,则Department.Employees.Count()= 3

如何在不使用新的DataContext的情况下更新MyDataContext或现有的Department实体?

(我在整个请求中使用一个DataContext,并使用它执行几个不同的数据操作,因此很难尝试引入另一个DataContext)

linq-to-sql

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

在SQL Azure上重试LINQ-TO-SQL逻辑 - 高效实现?

我有一个使用在Azure中运行的LINQ-TO-SQL的相当大的Web应用程序,我遇到来自SQL-Azure的Transient错误,因此需要实现重试.我知道Transient Fault Handling Framework和一些提供示例如何使用它的站点,但看起来你必须将每个LINQ查询包装成类似于下面的内容:

RetryPolicy retry = new RetryPolicy<MyRetryStrategy>(5, TimeSpan.FromSeconds(5));
Result = retry.ExecuteAction(() =>
{
   … LINQ query here...
});
Run Code Online (Sandbox Code Playgroud)

在我的数据层中有数百个LINQ查询,这看起来非常混乱,而且很多时候查询在枚举结果之前并没有实际执行.例如,我的数据层中的大多数函数都将IQueryable <>返回到业务层,这使得它们比返回List更灵活.因此,这意味着您必须使用数据库重试逻辑来丢弃业务逻辑层 - 这很丑陋.

所以我想为了保持数据层中的重试逻辑,我必须在我的所有查询上放置.ToList(),以便它们在那里执行,而不是在上面的层中.

我真的希望有一种方法可以在某些基类中实现重试逻辑,而不必更改我的所有查询.好像EF也会遇到这个问题.

尝试和SQL-Azure团队进行自动重试是真正的答案,所以我们不必在代码中担心这一点吗?

linq-to-sql azure-sql-database

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

组合的Azure Web角色和辅助角色项目在部署时未看到app.config

我正在实现此处所述的组合Web /辅助角色方案,您只需将以下内容添加到您的辅助角色:

public override void Run()
{
    // This is a sample worker implementation. Replace with your logic.
    Trace.WriteLine("WorkerRole1 entry point called", "Information");
    while (true)
    {
        Thread.Sleep(10000);
        Trace.WriteLine("Working", "Information");
    }
}
Run Code Online (Sandbox Code Playgroud)

正如帖子的评论中所指出的那样,问题在于此工作进程无法读取web.config,因此您必须添加app.config.还注意到app.config不会自动部署.

所以我的问题是如何配置我的项目,以便部署app.config?

我已将app.config添加到我的项目中,将Build Action设置为"Content",然后"始终复制"

这项工作在EMULATOR中很精细,但在部署到Azure时却没有.

注意:我注意到在模拟器中创建了一个projectname.dll.config,但是在部署到Azure时却没有.我正在使用VS2010,Windows Azure Tools 2011

我知道有人会建议使用.cscfg文件,但我的许多组件都从web.config/app.config获取设置:Elmah,Transient Fault Handling Client,Diagnostics,Email等...

app-config azure

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

从azure云存储下载大文件的最佳方式

我有一个运行在azure中的MVC Web应用程序,可以提供存储在云存储中的大型文件,如mp3,pdf等.提供这些文件的最佳方式是什么,因此用户可以在点击链接/按钮时下载它们?

简单的方法就是向他们展示:

<a href="...blob.core.windows.net/container/file.mp3">

但是用户必须右键单击才能下载.

要强制下载,您可以返回File ActionResult:

public ActionResult GetPDF( string filename )
{
    return File( filename, "application/pdf", Server.HtmlEncode( filename ) );
}
Run Code Online (Sandbox Code Playgroud)

这个(我认为)的缺点是webrole必须读入文件并将它们输出到流,这将消耗资源,并可能使许多用户陷入困境.而简单的href链接解决方案基本上放弃了工作,因此浏览器直接与云存储对话.

我对么?我应该关注webrole上的额外工作吗?

是否有另一种强制文件下载的方法而不会给webrole带来负担?

更新:

所以我最终做的是使用Content-Type"binary/octet-stream"上传mp3 - 这似乎强制下载提示.不确定这是不是一个好习惯,但它到目前为止是有效的.

asp.net-mvc download azure

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

如何从 LINQ-TO-SQL 中的 ExecuteQuery() 映射额外的字段但保留 LINQ 实体

假设我有一个 Position 表和一个相关的 Team 表,我需要从 ExecuteQuery() 调用中获取 Position 实体的列表,以及相关表中的 Team 名称。如:

var list = dc.ExecuteQuery<T>("SELECT Position.*, Team.Name  AS TeamName " +
"FROM Position LEFT JOIN Team ON Position.TeamID=Team.TeamID");
Run Code Online (Sandbox Code Playgroud)

(我需要使用 ExecuteQuery(),因为实际查询非常复杂。)

是的,我可以使用 Position 类中的所有字段和 teamname 字段创建一个新的平面类,但我需要结果集是实际的 LINQ 实体,而不仅仅是 POCO,因为我将遍历这些记录并更新一些字段.

第一个想法,创建一个包含位置和新字段的新类

public class PositionExtended
{
   public Position position {get; set;}
   public string teamname {get; set;}
}

ExecuteQuery<PositionExtended>("SELECT Position.*, Team.Name  AS TeamName " +
"FROM Position LEFT JOIN Team ON Position.TeamID=Team.TeamID");
Run Code Online (Sandbox Code Playgroud)

这正确映射了团队名称,但不是位置对象。


第二个想法,继承自 Position 类:

public class PositionExtended : …
Run Code Online (Sandbox Code Playgroud)

c# executequery linq-to-sql

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

缺少从泛型类中获取的类中的构造函数

我正在尝试基于这篇文章创建一个通用的LINQ-TO-SQL存储库,它基本上允许您定义通用基础存储库类,然后您可以通过从通用基础派生来定义所有实际存储库类.

我希望选择使用存储库,无论是否传入数据上下文,因此我决定在通用基类中创建两个构造函数:

  public abstract class GenericRepository<T, C>
        where T : class
        where C : System.Data.Linq.DataContext, new()
    {
        public C _db;

        public GenericRepository()
        {
            _db = new C();
        }


        public GenericRepository(C db)
        {
            _db = db;
        }


        public IQueryable<T> FindAll()

    ... and other repository functions
   }
Run Code Online (Sandbox Code Playgroud)

要使用它,我会浏览我的实际存储库类:

public class TeamRepository : GenericRepository<Team, AppDataContext> { }
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试将其与参数一起使用:

AppDataContext db = new AppDataContext();
TeamRepository repos=new TeamRepository(db);
Run Code Online (Sandbox Code Playgroud)

我收到错误: 'App.Models.TeamRepository'不包含带有1个参数的构造函数

所以,看起来你不能继承C#中的构造函数,那么,你将如何对此进行编码以便我可以调用:TeamRepository()或TeamRepository(db)

c# generics repository linq-to-sql

3
推荐指数
1
解决办法
1588
查看次数

表名以"es"结尾的Linq to SQL会创建错误的实体类名

我的SQL表名都是复数 - 事件,团队,校园等...当我将表拖入dbml时,它会创建一个名为" Campuse " 的实体,当然这是不正确的.我在属性页面中手动将其重命名为Campus,但它似乎没有正确更新所有自动生成的代码.例如,.designer.cs文件具有以下代码:

    public System.Data.Linq.Table<Campus> Campus
Run Code Online (Sandbox Code Playgroud)

什么时候应该

    public System.Data.Linq.Table<Campus> Campuses
Run Code Online (Sandbox Code Playgroud)

关联名称的类似问题.

我可能会完成所有生成的代码,并尝试手动重命名所有内容,但这很痛苦.有没有更好的办法?

pluralize linq-to-sql

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

为什么azure的CloudBlockBlob.Uri.AbsoluteUri返回HTTPS:对于blobls url?

var account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");

// create container
Storage = account.CreateCloudBlobClient();

Container = Storage.GetContainerReference("container");
Container.CreateIfNotExist();

// configure for public access
var permissions = Container.GetPermissions();
permissions.PublicAccess = BlobContainerPublicAccessType.Container;
Container.SetPermissions(permissions);

...

CloudBlockBlob blob = Storage.GetBlockBlobReference(blobname);
blob.UploadFromStream(file.InputStream);
url = blob.Uri.AbsoluteUri;

//url returns:  https://myazureacct.blob.core.windows.net/...
Run Code Online (Sandbox Code Playgroud)

我可以使用http:// myazureacct访问该资源....但为什么AbsoluteUri会返回https?

url blob azure

0
推荐指数
1
解决办法
2776
查看次数