小编Mic*_*hal的帖子

实体框架MappingException:类型'XXX已被多次映射

我在Web应用程序中使用Entity框架.每个请求创建ObjectContext(使用HttpContext),特此代码:

string ocKey = "ocm_" + HttpContext.Current.GetHashCode().ToString();
if (!HttpContext.Current.Items.Contains(ocKey))
{
    HttpContext.Current.Items.Add(ocKey, new ElevationEntityModel(EFConnectionString));
}
_eem = HttpContext.Current.Items[ocKey] as ElevationEntityModel;
Run Code Online (Sandbox Code Playgroud)

不是每次都有,但有时我有这个例外:

用户代码未处理System.Data.MappingException消息=类型"XXX"已被多次映射.来源= System.Data.Entity的

我完全糊涂了,我不知道是什么导致了这个问题.

有谁能够帮我?

.net c# entity-framework

26
推荐指数
2
解决办法
9660
查看次数

使用ChannelFactory和CreateChannel调用异步WCF

我处理的项目是Web服务器上托管的Web应用程序调用托管在应用服务器上的WCF服务.WCF调用的代理由ChannelFactory创建,调用通过channel进行,例如:

(省略使用块)

var factory = new ChannelFactory<IUserService>(endpointConfigurationName);
var channel = factory.CreateChannel();

var users = channel.GetAllUsers();
Run Code Online (Sandbox Code Playgroud)

如果我理解的话,通过频道调用是异步的,Web服务器上的线程在请求​​期间是空闲的,只是等待响应.

我想像这样打电话异步:

var users = await channel.GetAllUsersAsync();
Run Code Online (Sandbox Code Playgroud)

有没有办法如何使用ChannelFactory和通道异步进行调用?我没找到任何.我知道我可以通过svcutil/Add服务引用生成异步方法,但我不想那样做.另外,我不想通过添加异步方法来更改应用服务器(IUserService)上的服务接口.

有没有办法如何使用ChannelFactory调用方法异步?谢谢.

.net c# wcf async-await

8
推荐指数
3
解决办法
5802
查看次数

F#泛型泛型构造要求类型'struct(Guid*int)'具有公共默认构造函数

我在C#中有一个带有此返回类型的方法的接口:

Task<(Guid, int)?>
Run Code Online (Sandbox Code Playgroud)

我需要在F#中实现这个接口,如果我没有弄错,这在F#中应该是等价的:

Task<Nullable<ValueTuple<Guid, int>>>
Run Code Online (Sandbox Code Playgroud)

不幸的是,当我编译时,我收到此消息:

generic construct requires that the type 'struct (Guid * int)' have a public default constructor
Run Code Online (Sandbox Code Playgroud)

我发现了一些类似的问题,看起来解决方案是使用[<CLIMutable>]属性.但这不是我可以用System.ValueTuple做的事情.有没有办法在F#中使用Nullable ValueTuple?

generics f# c#-to-f# valuetuple

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

ASP.NET Core - IServiceProvider 何时释放?

我在 ASP.NET Core 3.1 应用程序中面临处置 IServiceProvider 对象的问题:

System.ObjectDisposedException: Cannot access a disposed object.
Object name: 'IServiceProvider'.
Run Code Online (Sandbox Code Playgroud)

我正在类中的方法IServiceProvider内捕获对象并在. 大多数情况下,这工作正常,但偶尔会被抛出。我可以理解in不应该这样使用。所以我想知道:ConfigureServicesStartupBackgroundServiceObjectDisposedExceptionIServiceProviderConfigureServices

  • 什么时候被Dispose/DisposeAsync召唤IServiceProvider?什么是ServiceProvider生命周期?
  • IServiceProvider在BackgroundService 中引用ASP.NET Core 的正确方法是什么?我应该在那里使用IServiceScopeFactory并创建新的范围吗?

.net c# .net-core asp.net-core asp.net-core-3.1

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

Sharepoint查找字段和WebId ="

我尝试在内容类型中添加查找字段.Field有这个定义:

<Field ID="{c80e8e3c-7124-4772-a39d-5b69f131d542}"
         Name="Site"
         Group="Tieto Intranet Columns"
         Type="Lookup"
         DisplayName="Site"
         StaticName="Site"
         List="Lists/FavoriteSites"
         ShowField="Title"
         PrependId="TRUE"
         WebId="~sitecollection"
   >
Run Code Online (Sandbox Code Playgroud)

我希望通过此查找字段引用的FavoriteSites列表存在于网站集范围内.部署顺利,但是当我使用此查找基于内容类型创建列表时,看起来查找字段未连接到FavoriteSites列表.我将一些数据添加到FavoriteSites中,而不是尝试在FavoriteSites上的查找字段中添加内容到第二个列表中.不幸的是下拉选择,这应该显示我从FavoriteSites列表中的数据是空的.

当我手动为FavoriteSites创建新的查阅列时,一切正常.

有人知道这个查找定义中哪里有问题?

更新:

正如Rich推荐我的那样,我在Verbose上设置日志级别找到这条消息:

无法找到在特征{d86c7005-d31d-43ae-b86b-38f28b81072e}中为字段{c80e8e3c-7124-4772-a39d-5b69f131d542}指定的WebId = ~sitecollection和List = Lists/FavoriteSites属性.设置列表= {39CEC23E-FB28-47B3-BC36-C21780AD1D94}.

我不明白,因为列表收藏网站存在.FavoriteSites列表以及具有"站点"字段的第二个列表由网站集范围上的一个功能部署.

我无法通过GUID在查找中指定列表,因为我不知道部署时间中的guid.

sharepoint content-type lookup-field

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

ASP.NET Core自定义绑定ModelName始终为空

我已经实现了自定义活页夹:

public class CustomModelBinder : IModelBinder
{
    public Task BindModelAsync(ModelBindingContext bindingContext)
    {
        var modelName = bindingContext.ModelName;

        var valueProviderResult = bindingContext.ValueProvider.GetValue(modelName);

        if (valueProviderResult == ValueProviderResult.None)
        {
            return Task.CompletedTask;
        }

        var modelAsString = valueProviderResult.FirstValue;

        if (!string.IsNullOrEmpty(modelAsString))
        {
            // custom login here
        }

        return Task.CompletedTask;
    }
}
Run Code Online (Sandbox Code Playgroud)

以及相应的模型绑定器提供者:

public class CustomModelBinderProvider : IModelBinderProvider
{
    public IModelBinder GetBinder(ModelBinderProviderContext context)
    {
        if (context == null)
        {
            throw new ArgumentNullException(nameof(context));
        }

        if (context.Metadata.ModelType == typeof(CustomModel))
        {
            return new BinderTypeModelBinder(typeof(CustomModelBinder));
        }

        return null;
    }
}
Run Code Online (Sandbox Code Playgroud)

我已将自定义活页夹提供程序添加到 ModelBinderProviders …

asp.net asp.net-mvc asp.net-core asp.net-core-2.1

5
推荐指数
0
解决办法
1469
查看次数

Java中GMT中的毫秒数

我需要将毫秒转换为GMT日期(在Android应用中),例如:

1372916493000

当我通过此代码转换它:

Calendar cal = Calendar.getInstance();
cal.setTimeZone(TimeZone.getTimeZone("GMT"));
cal.setTimeInMillis(millis);
Date date = cal.getTime();
Run Code Online (Sandbox Code Playgroud)

结果是07:41 07/04/2013.当我使用时,结果是一样的:

Date date = new Date(millis);
Run Code Online (Sandbox Code Playgroud)

不幸的是结果看起来不正确,看起来像我当地的时间.我尝试通过此服务转换相同的数字,结果是05:41 07/04/2013,我认为是正确的.所以我有两个小时的差异.任何人都有任何建议/提示我的转换有什么问题?

java android date

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

dotnet-counters ps 不显示任何进程

我有 .NET Core 2.2 应用程序,想使用dotnet-counters来获取一些有关 GC 的数据。不幸的是,由于某种原因,dotnet-counters 看不到我的应用程序(.NET 核心进程)。当我跑步时

dotnet-counters ps
Run Code Online (Sandbox Code Playgroud)

它什么也不返回(我的.NET核心应用程序当然正在运行)。我使用 .NET Core 版本 2.2.8 和 dotnet-counters 版本 3.1.57502。我尝试了应用程序的独立版本和依赖于框架的版本。

c# .net-core dotnetcorecli

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

SimpleFramework XML:具有内部文本和子元素的元素

我有这种格式的XML:

<element1>
     some inner text
     <child1>11</child1>
     <child2>True</child2>
</element1>
Run Code Online (Sandbox Code Playgroud)

我尝试通过简单的框架将此XML映射到对象上:

@Element(name = "element1")
public static class Something {

    @Element(required=false)
    public int child1;

    @Element(required=false)
    public boolean child2;

}
Run Code Online (Sandbox Code Playgroud)

我无法更改XML,我需要在类中的某些字段上映射值"some inner text".不幸的是,我不知道该怎么做(如果可能的话).我试过@Text注释,但它不能和@Element一起用在一个类中.

谢谢你的帮助.

java simple-framework

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

HttpClient的超时在异步块内不起作用

我正在尝试使用HttpClient在F#中发送POST请求.不幸的是,我发现F#中的超时不起作用.我有这样的代码:

let asyncTest() = async {
    let httpClient = new HttpClient()
    try 
        let! res = httpClient.PostAsync("http://135.128.223.112", new StringContent("test"), (new CancellationTokenSource(2000)).Token) |> Async.AwaitTask
        Console.WriteLine("Test 1")
    with 
        | :? Exception as e -> Console.WriteLine("Test 2")
} 
Run Code Online (Sandbox Code Playgroud)

您在代码中可以看到的IP不存在.我希望2秒后取消呼叫(取消令牌),但永远不会抛出异常("测试2"永远不会在屏幕上打印).在PostAsync方法调用之后,程序控制永远不会返回到异步块.如果我使用HttpClient.Timeout属性或Async.Catch而不是try块,行为是相同的.

在C#中,相同的代码按预期工作,引发两秒异常:

private async Task Test()
{
    var httpClient = new HttpClient();
    await
            httpClient.PostAsync("http://135.128.223.112", new StringContent("test"),
                new CancellationTokenSource(2000).Token);
 }
Run Code Online (Sandbox Code Playgroud)

我知道F#和C#中的异步是不同的所以我希望这是由一些同步问题引起的,死锁......我希望有更深入了解F#async的人可以解释这个并提供解决方法.

更新:我正在开始像这样的F#异步工作:

Async.Start (asyncTest())
Run Code Online (Sandbox Code Playgroud)

我在控制台应用程序中运行此测试,最后我有ReadKey(),因此应用程序不会比异步更快结束.

在评论Fyodor的评论后,我试图将其更改为RunSynchronously.现在引发异常,但我仍然需要它与Async.Start一起工作.

f# asynchronous c#-to-f# async-await f#-async

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