结合Unit of Work并且Repository Pattern是现在相当广泛使用的东西.正如Martin Fowler 所说,使用的目的UoW是形成商业交易,同时不知道存储库实际如何工作(持续无知).我已经回顾了很多实现; 并忽略具体细节(具体/抽象类,接口,......),它们或多或少类似于以下内容:
public class RepositoryBase<T>
{
private UoW _uow;
public RepositoryBase(UoW uow) // injecting UoW instance via constructor
{
_uow = uow;
}
public void Add(T entity)
{
// Add logic here
}
// +other CRUD methods
}
public class UoW
{
// Holding one repository per domain entity
public RepositoryBase<Order> OrderRep { get; set; }
public RepositoryBase<Customer> CustomerRep { get; set; }
// +other repositories …Run Code Online (Sandbox Code Playgroud) 我尝试通过appcfg.py在Google App Engine上更新项目:
C:\> "C:\Program Files (x86)\Google\google_appengine\appcfg.py" update c:\secondApp
Run Code Online (Sandbox Code Playgroud)
但我立即得到以下错误(顶行被忽略):
File "C:\Python27\lib\urllib2.py", line 1240, in https_open
context=self._context)
TypeError: do_open() got an unexpected keyword argument 'context'
Run Code Online (Sandbox Code Playgroud)
我决定深入研究文件urllib2.py并找到问题所在.在几分钟的代码审查之后,我得出这样的结论:接受名为参数的重载context不存在.所以,我更改了原始代码段:
def https_open(self, req):
return self.do_open(httplib.HTTPSConnection, req,
context=self._context)
Run Code Online (Sandbox Code Playgroud)
至
def https_open(self, req):
return self.do_open(httplib.HTTPSConnection, req)
Run Code Online (Sandbox Code Playgroud)
和瞧!它有效(虽然出现了关于身份验证的另一个问题,但第一个问题得到了解决).但是很奇怪,在正式版本中存在这样的错误,而很可能其他人遇到了同样的问题.令人惊讶的是,我找不到其他人报告的这个问题!
模块有什么问题吗?我是否混合了错误版本的已安装软件包?有帮助吗?
我的Google App Engine SDK版本:1.9.17 x64
我安装的Python版本:2.7.9 x64
我的平台:Windows 8.1 x64
我不熟悉Python:D
解:
正如Migel Tissera所说,问题在于身份验证.但我尝试了他提出的命令并得到了同样的错误.幸运的是,我执行了以下命令并取得了成功!(我添加了--noauth_local_webserver和--no_cookies开关):
appcfg.py --noauth_local_webserver --oauth2 --skip_sdk_update_check --no_cookies update c:\secondApp
Run Code Online (Sandbox Code Playgroud) 任何人都可以澄清SQL Server数据工具(SSDT)2012中的构建,发布,部署和比较+更新之间的区别吗?
我最近切换到Entity Framework 5.现在,我想从现有数据库生成POCO类,我还需要延迟加载和更改跟踪.因此,所有标量属性都应该是虚拟的以及导航属性.
添加新的ADO.Net实体数据模型以.edmx文件和其他一些.cs和.tt文件结尾.
首先,我想知道为什么生成的POCO类默认不符合变更跟踪代理的要求,即标量属性不是虚拟的.
其次,如何生成支持代理的poco类?
PS:我接受了Slauma的答案是迄今为止最好和唯一的答案,但我不同意它的第一部分.这是我的论点
Slauma讨论了代理的两个问题:限制和性能:
关于启用代理的实体的限制:当实体框架在DB First方法中生成类时,类必须遵循以启用更改跟踪代理的规则并不是那么重要,因为它们根本不是限制性的.谁真正关心导航集是IList还是HashSet?只有当应用程序中存在perior设计类并且要从中生成表时,才能理解这些限制.
DB首先不支持复杂属性.所以我们可以将它们从讨论中排除.
关于性能:在所讨论的文章以及我迄今为止研究的其他一些实验中,结果并不是非常有说服力地拒绝代理以支持快照.首先,实验是在大量实体(即10,000)上完成的.应用程序(不在数据库中)中的批处理过程对大量实体起作用并不是不可能的,但是假设有更好的方法,例如存储过程.其次,根据应用程序的类型和需求,我们通常会处理少量的entites,例如当Repository模式被强制使用时; 代理和快照的性能没有区别.有趣的是,在已解决的实验中,重新为属性重新分配相同的值是代理性能显着失败的唯一情况.但谁真的这样做?小心避免反复通知更改跟踪器非常容易.同样,在这种情况下,当处理大量的entites时会出现重大问题.
我有一个Windows窗体,包含一个文本框和一个datagridview.一旦文本框的文本发生更改,datagridview的数据源就会更新.它通过处理文本框的TextChanged事件并为数据源分配新的List来完成.通常,新数据源包含1000多行,相当大量的数据.此外,查询数据库以获取此列表也很耗时.
让我感到惊讶的是,如果我在文本框中输入的速度足够快,那么datagrid会一次又一次地暂停渲染,并且只会渲染最终结果.它完全忽略了中间结果.这是有道理的,因为在连续的文本更改期间运行的UI线程正忙.但为什么我仍然可以输入文本框?
这就像文本框在另一个线程上,但绝对不是.有人知道为什么吗?
有没有办法根据依赖项(更高级别的依赖项目)手动安排VS 2010+解决方案资源管理器中的项目?
我需要一个方法中的类名称,例如X.同时,我不想放弃类型安全,我不会允许其他开发人员将字符串(类名)传递给该方法.
像这样的东西:
void X( ??? class) // --> don't know how
{
var className = get the name of class // --> which I don't know how
Console.WriteLine(className);
}
X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class
Run Code Online (Sandbox Code Playgroud) 使用db first方法,我希望我的应用程序在我尝试更新(过时的)实体时抛出并发异常,该实体已经由另一个应用程序/用户/会话更新了数据库中的相应行.
我在.Net 4.5上使用Entity Framework 5.相应的表具有Timestamp列以维护行版本.
考虑以下课程:
class MyContext : DbContext
{
public DbSet<Order> Orders { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
并实例化一个新对象:
var mycontext = new MyContext();
Run Code Online (Sandbox Code Playgroud)
为什么mycontext.Orders不为null?什么时候初始化?谁初始化了它?我真的很困惑,因为基类(DbConetxt)无法访问派生类属性,因此不可能在基础对象中初始化自动属性.
为什么不能声明类型为的类常量Lambda Expression。我想要这样的东西:
class MyClass
{
public const Expression<Func<string,bool>> MyExpr = (string s) => s=="Hello!";
}
Run Code Online (Sandbox Code Playgroud)
但是我得到了编译错误: Expression cannot contain anonymous methods or lambda expressions
请考虑以下代码段(在Windows窗体应用程序中编写):
public partial class Form1
{
....
public void Caller()
{
Form1 myRef = this;
Change(ref this) //--> won't compile because *this* is read-only
Change(ref myRef); //--> compiles but doesn't work.
}
....
public void Change(ref Form1 theRef)
{
theRef = new Form1();
theRef.Text = "I am a new form";
}
}
Run Code Online (Sandbox Code Playgroud)
this不允许通过引用传递.那是好的和明智的.但为什么this如上所示间接传递不起作用?据我所知,如果参数通过引用传递,则被调用方法中的任何赋值都会反映到调用方法中.为什么不在这里工作?
更新以使问题清楚
1-我没有努力完成任何特别的事情.我只是想测试一下ref.
2-为什么我误解的原因ref是,我完全忘Form1 myRef = this实际拷贝底层的地址Form1对象myRef; 所以myRef变量与this它们无关,只是它们都指向同一个对象.
可能重复:
在C#中获取没有完整名称空间的类型名称
有没有人知道我们如何以一种简单的方式获取类的名称,就像Java可以通过什么方式一样class.getName()?
NB:是的,有一些类似于CreateInstance类类型的混乱解决方法,然后得到对象的名称,但我想要一个简单的方法.
编辑1:
实际上,我需要一个方法中的类名称X.同时,我不想放松类型安全,我不会允许其他开发人员将字符串传递给该方法.像这样的东西:
void X( ??? class) // --> don't know how
{
var className = get the name of class // --> which I don't know how
Console.WriteLine(className);
}
X(tblEmployee); //--> usage of X, where tblEmployee is a POCO class
Run Code Online (Sandbox Code Playgroud) 在这里,我将展示从另一个函数引用一个不存在的函数是可能的,并且 SQL Server 在执行时间之前不会检查它:
USE [SomeDataBase];
SELECT dbo.Booo();
Run Code Online (Sandbox Code Playgroud)
显然,如果您没有函数Booo,则会产生关于Booo无法识别函数的错误。不过这并不意外!
现在,试试这个:
CREATE FUNCTION dbo.Foo()
RETURNS INT
AS
BEGIN
DECLARE @Temp INT
SET @Temp = (SELECT dbo.Booo())
RETURN 1
END
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,该脚本创建了该函数,Foo尽管该Booo函数并未退出。
任何的想法?
c# ×6
class ×3
architecture ×1
concurrency ×1
datagridview ×1
dbcontext ×1
dbset ×1
expression ×1
field ×1
java ×1
lambda ×1
poco ×1
python ×1
t-sql ×1
t4 ×1
timestamp ×1
type-safety ×1
unit-of-work ×1
winforms ×1