我正在准备一个新的Windows项目,并想知道使用什么样的DAL技术.最初我在寻找一些更简单的东西,不花太多时间来构建它.但我也理解,从长远来看,它必须是高效和可扩展的.
我计划在3层系统上使用WPF(MVVM)客户端和WCF服务.
只是总结一下我熟悉的所有现有技术:
数据集
PRO:可能有点老式,但非常容易使用,让大多数部件为您自动生成.关于数据集的一个有力方面是通过关系遍历相关数据的便利性.此外,它还与数据库断开连接,并可能通过自动处理时间戳来简化更新.包括验证.
CONTRA:很老式.有些人认为它们不是真正的业务对象/模型,而只是SQL数据表的镜像.在WCF服务/客户端之间传递它们可能比自己创建的业务对象更难.
企业库4.1 - 数据访问块
PRO:DAL被精美地置于工厂模式中.它自动处理连接打开和关闭.在大多数情况下非常容易使用.它支持dataSet和普通SQL Sps来创建自己的Business对象.作为正在进行的框架的一部分,与企业库的其余部分结合使用可以更有效地获得高效的最终产品.
CONTRA:??
Linq to SQL
PRO:自动将SQL表创建为业务对象.易于CRUD.从理论上讲,这是一个非常好的方法.
CONTRA:在它出现时玩弄它,我发现它片状,有时不稳定.在微软宣布实体框架4.0(作为.NET 4.0的一部分)将是微软推荐的方式之后,它已经被认为是一种死技术.在.NET 4.0中只有少数错误修复,但没有更多功能扩展计划.
实体框架4.0
我对此一无所知,但只是因为它最终将取代.NET 4.0上的所有其他内容.我也很想使用它,但是由于它还在BETA中,我还是不能这样做.
我很想使用Enterprise Library 4.1 - 数据访问块并创建我自己的业务对象.大骗局是创建DAL需要更多时间.除非有人能说服我通过数据访问块使用DataSet.
你有什么意见和想法?非常感谢,Kave
.net enterprise-library data-access-layer dataset linq-to-sql
我可以像这样成功加载下面的Bitmap,并在视图的Image控件中显示它.
var bitmapImage = new BitmapImage
{
UriSource =
new Uri("../Images/Test.JPG", UriKind.Relative)
};
Run Code Online (Sandbox Code Playgroud)
但是,只要我添加此行以从位图创建WriteableBitmap,
var w = new WriteableBitmap(bitmapImage);
Run Code Online (Sandbox Code Playgroud)
我在上面的行中收到运行时错误:"对象引用未设置为对象的实例."
似乎BitmapImage的创建被延迟了,可能是吗?我该怎么解决这个问题?
更新:
我现在正在尝试这个,但openImage似乎永远不会被击中.(即使没有试图让它同步,它仍然失败)这里有什么问题?
var image = new BitmapImage();
image.ImageOpened += (sender, args) => resetEventBitmap.Set();
image.ImageFailed += (o, eventArgs) =>
{
resetEventBitmap.Set();
throw eventArgs.ErrorException;
};
image.CreateOptions = BitmapCreateOptions.IgnoreImageCache;
image.UriSource = uri;
resetEventBitmap.WaitOne();
Run Code Online (Sandbox Code Playgroud)
谢谢,
我需要一些事件,如MainWindow上的SizeChanged,当用户更改窗口的位置时会激活它?
有任何想法吗?
非常感谢,
我在这里找到了一个有趣的博客,解释了如何保护开发人员对连接字符串的可见性.http://blogs.msdn.com/b/sqlazure/archive/2010/09/07/10058942.aspx
由于我是我项目中唯一的开发人员,我不会担心这一点,但我关心的是两件事
在将程序包部署到Azure Cloud时,项目中的连接字符串是否有可能被第三方看到?或整个包文件是否加密?
部署包后,是否可以从Web读取连接字符串?或者它是安全和防弹的吗?
我需要知道用户何时对WPF Datagrid进行了排序.为什么没有Sorted活动?我只能找到一个排序事件.
我也调查过CollectionView,ListCollectionView那就是将对象暴露给View,没有任何运气.
我很惊讶,因为这应该是开箱即用的.有任何想法吗?
周日晚些时候,我犯了一个错误.我提交并直接推入主分支,我应该创建一个分支,然后将更改推送到新分支.
所以我可以做一个git revert SHA用新提交恢复最后一次提交.
不过我的改变怎么样,我不想放松它们.
我应该从已经修改过的Master中创建一个分支git checkout -b feature,然后还原Master分支吗?
但是,一旦我将功能合并到主服务器中会发生什么,它是否会知道该提交已在Master上恢复并消除它? git merge feature
顺便说一下,没有历史重写问题,因为我是这个项目的唯一开发人员.因此,如果它是更好的选择,我会考虑硬复位.
谢谢你的建议
我正在编写一个脚本来收集那些没有收到电子邮件确认电子邮件的用户的电子邮件并将其重新发送给他们。该脚本显然在 Flask 应用程序上下文之外工作。我想使用 url_for() 但无法正确使用。
def resend(self, csv_path):
self.ctx.push()
with open(csv_path) as csv_file:
csv_reader = csv.reader(csv_file)
for row in csv_reader:
email = row[0]
url_token = AccountAdmin.generate_confirmation_token(email)
confirm_url = url_for('confirm_email', token=url_token, _external=True)
...
self.ctx.pop()
Run Code Online (Sandbox Code Playgroud)
我要做的第一件事是在配置中设置 SERVER_NAME。但后来我收到此错误消息:
werkzeug.routing.BuildError:无法使用值 ['token'] 为端点“confirm_email”构建 url。您的意思是“静态”吗?
这是它的定义方式,但我认为它甚至找不到这个,因为它在作为脚本运行时没有注册:
app.add_url_rule('/v5/confirm_email/<token>', view_func=ConfirmEmailV5.as_view('confirm_email'))
Run Code Online (Sandbox Code Playgroud)
有没有办法挽救 url_for() 还是我必须建立自己的网址?谢谢
我有两个单元测试,如果我一一运行它们,它们就会通过。如果我在类级别运行它们,一个通过,另一个失败response = await ac.post(并显示错误消息:RuntimeError: Event loop is closed
@pytest.mark.asyncio
async def test_successful_register_saves_expiry_to_seven_days(self):
async with AsyncClient(app=app, base_url="http://127.0.0.1") as ac:
response = await ac.post(
"/register/",
headers={},
json={
"device_id": "u1",
"device_type": DeviceType.IPHONE.value,
},
)
query = device.select(whereclause=device.c.id == "u1")
d = await db.fetch_one(query)
assert d.expires_at == datetime.utcnow().replace(
second=0, microsecond=0
) + timedelta(days=7)
@pytest.mark.asyncio
async def test_successful_register_saves_device_type(self):
async with AsyncClient(app=app, base_url="http://127.0.0.1") as ac:
response = await ac.post(
"/register/",
headers={},
json={
"device_id": "u1",
"device_type": DeviceType.ANDROID.value,
},
)
query = device.select(whereclause=device.c.id == "u1") …Run Code Online (Sandbox Code Playgroud) 我必须创建一个XamDataGrid,它显示时间范围x到y的动态数量的列.因此,我不知道用户会选择多少年来预先创建这些列.
现在通常在MVVM中,您只需通过XamDataGrid中需要Columns的多个Properties填充数据,后者只需自动生成它们.
显然我不能在运行时在我的ViewModel中创建属性,除非我用Reflection做了一些疯狂的事情.
我怎么能做到这一点?
我应该只为数据网格创建未绑定的字段并通过代码填充它们吗?我同意在这个阶段我不需要双向绑定,因为网格只是只读...只是大声思考.
这种方法是否可以不违反MVVM模式?谢谢
我能够使用jquery-validate验证多选,并创建了一个小提琴作为演示.按住Ctrl键取消选择选择,然后单击选择以查看效果.
<form id="myform">
<select id="id_deals-1-sales_item" class="multi_select_mandatory" name="deals-1-sales_item" multiple="multiple">
<option value="1">Hotel 3 Star</option>
<option selected="selected" value="2">Hotel 4 Star</option>
</select>
</form>
$(document).ready(function() {
var validator = $('#myform').validate({
// options
rules: {
"deals-1-sales_item": "required",
},
//ignore: ':hidden:not("#id_deals-1-sales_item")'
});
});
Run Code Online (Sandbox Code Playgroud)
但是一旦我选择了多选,它就会停止工作:看小提琴.
$('#id_deals-1-sales_item').chosen();
Run Code Online (Sandbox Code Playgroud)
虽然研究,我发现已经有人尝试这种具有jquery multiselect替代选择.似乎隐藏的元素在jquery validate中被忽略.我尝试应用该解决方案,但由于Chosen有不同的方法,我卡住了(选择中不存在多选)
在这里有任何jQuery大师可以指出我正确的方向吗?此外,我宁愿使用基于类而不是基于字段名称的解决方案.像这样:
这是我提出的一个解决方案.但不知道该怎么做???.
$.validator.addMethod("needsSelection", function(value, element) {
return $(element).???.length > 0;
});
var validator = $('#myform').validate({
});
$('#myform').find('select.multi_select_mandatory').each(function(){
$(this).change(function(){
$(this).valid();
});
$(this).rules('add', {
needsSelection: ""
});
});
Run Code Online (Sandbox Code Playgroud)
解:
通过下面的eicto解决方案,我能够创建一个基于类而不是基于字段名称的解决方案.当您拥有要立即验证的动态元素而不向服务器提交任何内容时,这将特别有用.
var …Run Code Online (Sandbox Code Playgroud) .net ×4
wpf ×3
c# ×2
python ×2
azure ×1
dataset ×1
events ×1
fastapi ×1
flask ×1
git ×1
jquery ×1
linq-to-sql ×1
mvvm ×1
pytest ×1
python-3.9 ×1
silverlight ×1
sql ×1
window ×1
wpfdatagrid ×1
xamdatagrid ×1