小编use*_*869的帖子

如何避免System.Data.Entity.Infrastructure.DbUpdateException

我有这个DbContext对象,包括 -

- Employee
- CompanyAddress  (PK: AddressFirstLine, City)
Note: one Employee can have many CompanyAddress
Run Code Online (Sandbox Code Playgroud)

仅当 CompanyAddress表中不存在某些地址时,记录才会添加到CompanyAddress表中.
如果我有两个来自数据库的DBContext对象,请说Snapshot1,Snapshot2.假设在拍摄这两个快照时,CompanyAddress表中没有记录.当对Snapshot1进行更改并保存时 - 将记录写入CompanyAddress表.
当对Snapshot2进行更改并使用保存时

mydataContext.SaveChanges();
Run Code Online (Sandbox Code Playgroud)

异常发生:

System.Data.Entity.Infrastructure.DbUpdateException: An error occurred while updating the entries
System.Data.SqlClient.SqlException: Violation of PRIMARY KEY constraint 'PK_CompanyAddress'. Cannot insert duplicate key in object 'dbo.CompanyAddress'
Run Code Online (Sandbox Code Playgroud)

似乎保存Snapshot1会使Snapshot2变脏,因为当它们保存回数据库时,两者都有相同的 CompanyAddress记录.

我可以在dbContext对象上进行哪些其他调用/设置以避免此错误?

谢谢!

c# entity-framework-5

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

为特定区域创建S3存储桶

如果我按如下方式创建S3存储桶:

    AmazonS3Config amazonS3Config = new AmazonS3Config
    {
        ServiceURL = "s3-eu-west-1.amazonaws.com"
    };
    AmazonS3Client amazonS3Client = new AmazonS3Client(myAccessKeyId, 
        mySecretAccessKey, amazonS3Config)

    PutBucketRequest request = new PutBucketRequest
    {
        BucketName = bucket.Name,
        BucketRegion = S3Region.EU
    };
    amazonS3Client.PutBucket(request); 
Run Code Online (Sandbox Code Playgroud)

如您所见,我已明确指定在欧盟地区创建我的存储桶,
但当我访问AWS explorer时,我可以看到我的存储桶在所有区域都可用.

如果我的存储桶总是在所有区域中复制,那么指定存储区域有什么意义呢?
有人可以澄清一下吗?

谢谢!

c# amazon-s3 region bucket

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

MemoryCache - AbsoluteExpiration - 更新后项目不会过期*

以下是用于缓存用户进行的无效登录尝试的代码.使用"绝对过期"缓存策略将项目添加到缓存中.

如果我只添加一个项目 - 它会在2分钟内按预期到期.但是,如果我更新该缓存项目(没有明确指定缓存策略) - 该项目仍然超过2分钟.这是代码片段:

public class UserLogin
{
    public string Username { get; set; }
    public List<DateTime> InvalidLoginTimestamp { get; set; }
    public bool IsLocked { get; set; }
}    

private void AddInvalidLoginToCache(string cacheKey)
{
    if (invalidLoginCache.Contains(cacheKey))
    {
        //Add invalid login to cache
        UserLogin invalidLogin = (UserLogin)invalidLoginCache[cacheKey];
        invalidLogin.InvalidLoginTimestamp.Add(DateTime.Now);
        invalidLoginCache[cacheKey] = invalidLogin;

        //Lock user account if invalid logins reach threshold
        if (invalidLogin.InvalidLoginTimestamp.Count == 3)
        {
            invalidLogin.IsLocked = true;
            invalidLoginCache.Set(cacheKey, invalidLogin, GetCachePolicyForLockOut());
        }
    }
    else
    {
        invalidLoginCache.Add(cacheKey,
                                new UserLogin { …
Run Code Online (Sandbox Code Playgroud)

c# memorycache

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

来自静态上下文的虚方法

我有一个BaseProgram充当所有其他程序的基类.
我想为HandleException() 此类添加一个可覆盖的方法以进行错误处理.
从这个BaseProgram派生的所有程序都应该可以选择编写自己的版本HandleException().

所以,我必须声明HandleException()如下virtual方法:

abstract class BaseProgram
{
    public abstract void Run();

    public static void RunWithExceptionHandling(BaseProgram programToRun)
    {
        try
        {
            //do some processing 
            programToRun.Run();
        }
        catch (Exception)
        {
           HandleException();  //Error : Can't access non-static method in static context
        }
    }

    public virtual void HandleException()
    { 
        //Do some basic exception handling here
    }
}
Run Code Online (Sandbox Code Playgroud)

但我不能在静态方法的catch块调用这个新的虚拟方法: RunWithExceptionHandling() 此外,由于应用程序的设计,我不能改变RunWithExceptionHandlingstatic,以非static:-(

任何想法如何解决这个问题所以我可以允许派生类有自己的版本HandleException()

c# oop

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

标签 统计

c# ×4

amazon-s3 ×1

bucket ×1

entity-framework-5 ×1

memorycache ×1

oop ×1

region ×1