我有这个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对象上进行哪些其他调用/设置以避免此错误?
谢谢!
如果我按如下方式创建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时,我可以看到我的存储桶在所有区域都可用.
如果我的存储桶总是在所有区域中复制,那么指定存储区域有什么意义呢?
有人可以澄清一下吗?
谢谢!
以下是用于缓存用户进行的无效登录尝试的代码.使用"绝对过期"缓存策略将项目添加到缓存中.
如果我只添加一个项目 - 它会在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) 我有一个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()
此外,由于应用程序的设计,我不能改变RunWithExceptionHandling的static,以非static:-(
任何想法如何解决这个问题所以我可以允许派生类有自己的版本HandleException()?