我已经尝试过几天了解这个问题,并且有很多关于工作单元和TransactionScope的教程,但我找不到任何关于这两者的内容.任何帮助非常感谢!
我正在使用Entity Framework和Unit Of Work模式以及每种类型的存储库.根据下面的简单代码,我有一个Member和MembershipDefinition实体.我想创建一个链接两者的Membership实体,但是当我创建Membership对象时,我想根据一些业务逻辑查询DB的最大值.因此,我需要使用某种DB事务来阻止另一个线程在我的线程将Membership对象写回DB之前递增db中的值.
如果我使用存储过程,这将非常简单,但我无法弄清楚如何使用纯c#...
下面的代码在数据库中创建了100个Membership实体,其中包含重复的MembershipNumbers.我需要使用这种方法来使用事务来确保c#代码中生成的所有成员编号都是唯一的.
class Program
{
static void Main(string[] args)
{
var p = new Program();
p.Go();;
}
public void Go()
{
long memberId;
long membershipDefId;
using(var unitOfWork = new UnitOfWork())
{
// Setup - create test club and member entities
var testUsername = ("TestUserName" + Guid.NewGuid()).Substring(0, 29);
var member = new Member()
{
UserName = testUsername
};
var testmemebrshpDefName = ("TestMembershipDef" + Guid.NewGuid()).Substring(0, 29);
var membershipDefinition = new ClubMembershipDefinition()
{
ClubId = 1, …Run Code Online (Sandbox Code Playgroud) 我一直在尝试使用Rx和可观察集合实现一个简单的生产者 - 消费者模式.我还需要能够轻松限制用户数量.我在并行扩展中看到过很多对LimitedConcurrencyLevelTaskScheduler的引用,但我似乎无法使用多个线程.
我想我做的很傻,所以我希望有人可以解释一下.在下面的单元测试中,我希望使用多个(2)线程来使用阻塞集合中的字符串.我究竟做错了什么?
[TestClass]
public class LimitedConcurrencyLevelTaskSchedulerTestscs
{
private ConcurrentBag<string> _testStrings = new ConcurrentBag<string>();
ConcurrentBag<int> _threadIds= new ConcurrentBag<int>();
[TestMethod]
public void WhenConsumingFromBlockingCollection_GivenLimitOfTwoThreads_TwoThreadsAreUsed()
{
// Setup the command queue for processing combinations
var commandQueue = new BlockingCollection<string>();
var taskFactory = new TaskFactory(new LimitedConcurrencyLevelTaskScheduler(2));
var scheduler = new TaskPoolScheduler(taskFactory);
commandQueue.GetConsumingEnumerable()
.ToObservable(scheduler)
.Subscribe(Go, ex => { throw ex; });
var iterationCount = 100;
for (int i = 0; i < iterationCount; i++)
{
commandQueue.Add(string.Format("string {0}", i));
}
commandQueue.CompleteAdding();
while (!commandQueue.IsCompleted)
{
Thread.Sleep(100); …Run Code Online (Sandbox Code Playgroud) c# concurrency observablecollection parallel-extensions system.reactive
我有一个问题,我正在尝试创建泛型方法的签名.
课程如下:
public class MarketDataRepository : IRepository
{
MarketWatchEntities _dbContext = new MarketWatchEntities();
public MarketDataRepository(){}
public MarketDataRepository(MarketWatchEntities dbContext)
{
_dbContext = dbContext;
}
public IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime ) where T : MarketDataPoint
{
return _dbContext.MarketDataPoints.Where(x => x.ReferenceDateTime >= startDateTime && x.ReferenceDateTime <= endDateTime).ToList();
}
}
public interface IRepository
{
IEnumerable<T> GetMarketData<T>(DateTime startDateTime, DateTime endDateTime) where T : MarketDataPoint;
}
Run Code Online (Sandbox Code Playgroud)
附加信息:
MarketWatchEntitiesextends DbContext(由Entity Framework生成).
我得到这个编译时异常:
Cannot implicitly convert type 'System.Collections.Generic.List<MarketWatcher.Domain.MarketDataPoint>' to 'System.Collections.Generic.IEnumerable<T>'. An explicit conversion exists (are …Run Code Online (Sandbox Code Playgroud)