我在php中创建一个WebService,我的网站将用它来查询Ajax调用的信息.
起初我只是使用内置的php mysql lib以标准方式完成它,并手动编写所有查询并在MySQL Workbench中创建整个数据模型等等.这非常耗时,如果我不得不改变数据模型,之后一切都会变得非常复杂,所以我决定寻找一个PHP ORM,我发现RedBean在我看来是纯粹的魔法和快乐.
除了我在性能问题上非常困难.我的网站是一个网站,供用户创建自己的电视连续剧列表.我查询一个系列的外部源并将其插入我的数据库,如果它还没有,否则我从我自己的数据库ofc中获取它.
我从这个外部来源回来的xml列出了系列,季节,剧集等等,我把这一切都存储起来.
function InsertSerie($serie) {
$serieBean = $this->CreateSerieBean($serie->Series);
$genreBeans = $this->CreateGenreBeans($serie->Series->Genre);
$actorBeans = $this->CreateActorBeans($serie->Series->Actors);
$episodeBeans = array();
foreach ($serie->Episode as $episode) {
$episodeBean = $this->CreateEpisodeBean($episode);
$seasonBean = $this->CreateSeasonBean($episode);
$writerBeans = $this->CreateWriterBeans($episode->Writer);
$guestBeans = $this->CreateActorBeans($episode->GuestStars);
$directorBeans = $this->CreateDirectorBeans($episode->Director);
R::associate($episodeBean, $seasonBean);
foreach ($writerBeans as $bean) {
R::associate($episodeBean, $bean);
}
foreach ($guestBeans as $bean) {
R::associate($episodeBean, $bean);
}
foreach ($directorBeans as $bean) {
R::associate($episodeBean, $bean);
}
$episodeBeans[] …Run Code Online (Sandbox Code Playgroud) 我似乎有一个问题,DataGrid通过接口本身添加行.以下是UI的屏幕截图:

如您所见,数据库中找到了0行,因此DataGrid右侧没有显示任何内容.但是id就像那里有一个空行,用于手动添加行.该DataGrid.CanUserAddRows设置为True,但没有任何效果.这是xaml为了DataGrid,我已经冒昧地删除了一些代码,使其变小.
PrivilegeDetailsView.xaml
<UserControl ...
d:DataContext="{d:DesignInstance impl:PrivilegeDetailsViewModel}">
<DataGrid ...
ItemsSource="{Binding RolesHasPrivilegesOnObjects}"
AutoGenerateColumns="False"
CanUserAddRows="True">
<DataGrid.Columns>
<DataGridTemplateColumn Header="Type" CanUserSort="True">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate DataType="{x:Type int:IRoleHasPrivilegeOnObjectListItemViewModel}">
<Image Source="{Binding Icon}" ToolTip="{Binding ToolTip}"/>
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTextColumn Width="*" Header="Name" Binding="{Binding Name}"/>
<DataGridCheckBoxColumn Header="Select" Binding="{Binding HasSelect, UpdateSourceTrigger=PropertyChanged}">
<DataGridCheckBoxColumn.ElementStyle>
<Style TargetType="CheckBox">
<Style.Triggers>
<DataTrigger Binding="{Binding CanHaveSelect}" Value="True">
<Setter Property="IsEnabled" Value="True"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</DataTrigger>
<DataTrigger Binding="{Binding CanHaveSelect}" Value="False">
<Setter Property="IsEnabled" Value="False"/>
<Setter Property="HorizontalAlignment" Value="Center"/>
</DataTrigger>
</Style.Triggers>
</Style>
</DataGridCheckBoxColumn.ElementStyle> …Run Code Online (Sandbox Code Playgroud) 我在我的文本框上尝试了这个事件处理程序:
private void TextBox_Tapped(object sender, Windows.UI.Xaml.Input.TappedRoutedEventArgs e)
{
//do this
}
Run Code Online (Sandbox Code Playgroud)
我也试过LayoutUpdated,SelectionChanged,PointerEntered,PointerReleased.单击该框后,它们都不会执行代码.
我使用创建的Windows 8.1商店App在WinRT.
我无法使用逗号或半冒号分隔每封电子邮件,使用mailto uri创建一个包含多个收件人的新邮件,两者都给出了同样的错误.
Invalid URI: The hostname could not be parsed.
Run Code Online (Sandbox Code Playgroud)
mailto字符串看起来像这样
"mailto:username@mail.com,username2@mail.com"
"mailto:username@mail.com,username2@mail.com,"
"mailto:username@mail.com, username2@mail.com"
"mailto:username@mail.com;username2@mail.com"
"mailto:username@mail.com;username2@mail.com;"
"mailto:username@mail.com; username2@mail.com"
Run Code Online (Sandbox Code Playgroud)
我已经尝试了所有这些变体,所有这些都给了我同样的错误,在新的uri时,就像这样.
var uri = new Uri(string.Format("mailto:{0}", mails));
Run Code Online (Sandbox Code Playgroud)
我不知道我做错了什么,或者如果没有实现,为什么它不会?
我创建了一些单元测试,看看是否有任何变化可行,但没有..
[TestClass]
public class UriMailToTest
{
private Uri CreateMailToUri(string mail)
{
if (string.IsNullOrEmpty(mail)) throw new ArgumentNullException("mail");
var uriMailTo = string.Format("mailto:{0}", mail);
return new Uri(uriMailTo);
}
[TestMethod]
public void CreateMailToUriTest1()
{
const string mailto = "username@mail.com";
var uri = CreateMailToUri(mailto);
uri.Should().NotBeNull();
}
[TestMethod]
public void CreateMailToUriTest2()
{
const …Run Code Online (Sandbox Code Playgroud) 休斯顿,我们有一个问题...不,我猜只是我一个。:)
我正在尝试对NHibernate QueryOver对象进行子查询。没有子查询的查询可以正常工作,但是添加子查询后,一切都会崩溃。
EDIT1:
我要完成的工作是选择与容器的所有关系的AccountStatus属性设置为DELETED的所有用户
var queryOver = session.QueryOver<User>();
queryOver.WhereRestrictionOn(x => x.UserHasContainer).IsNotEmpty
.JoinQueryOver<ContainerUser>(x => x.UserHasContainer)
.WithSubquery.WhereAll(x => x.AccountStatus == AccountStatus.DELETED);
Run Code Online (Sandbox Code Playgroud)
不断收到此异常:
System.Exception: right operand should be detachedQueryInstance.As<T>() - "DELETED"
at NHibernate.Impl.ExpressionProcessor.FindDetachedCriteria(Expression expression)
at NHibernate.Impl.ExpressionProcessor.ProcessSubqueryExpression(LambdaSubqueryType subqueryType, BinaryExpression be)
at NHibernate.Impl.ExpressionProcessor.ProcessSubquery[T](LambdaSubqueryType subqueryType, Expression`1 expression)
at NHibernate.Criterion.Subqueries.WhereAll[T](Expression`1 expression)
at RBAC.Infrastructure.DataAccess.QueryObject.Implementation.UserQueryObject.FilterByContainerRelationsAreScheduledForDeletion(IQueryOver`2 queryOver) in c:\APPL\dev\RBAC\Dev\RBAC.Infrastructure\DataAccess\QueryObject\Implementation\UserQueryObject.cs:line 113
at RBAC.Infrastructure.DataAccess.QueryObject.Implementation.UserQueryObject._ExecuteQuery(IQueryOver`2 queryOver) in c:\APPL\dev\RBAC\Dev\RBAC.Infrastructure\DataAccess\QueryObject\Implementation\UserQueryObject.cs:line 101
at RBAC.Infrastructure.DataAccess.QueryObject.Base.BaseQueryObject`1.ExecuteQuery(ISessionDecorater session) in c:\APPL\dev\RBAC\Dev\RBAC.Infrastructure\DataAccess\QueryObject\Base\BaseQueryObject.cs:line 20
at RBAC.Infrastructure.DataAccess.GenericDAO.Implementation.GenericDAO.GetByQueryObject[T](IQueryObject`1 queryObject) in c:\APPL\dev\RBAC\Dev\RBAC.Infrastructure\DataAccess\GenericDAO\Implementation\GenericDAO.cs:line 253
at RBAC.Infrastructure.BusinessService.CleanupModule.Implementation.RBACCleanerActions.CleanUpUsers() in c:\APPL\dev\RBAC\Dev\RBAC.Infrastructure\BusinessService\CleanupModule\Implementation\RBACCleanerActions.cs:line 59
Run Code Online (Sandbox Code Playgroud)
我已经用谷歌搜索了正确的操作数应该是detachedQueryInstance和其他查询,也没有运气。希望这里的人知道哪里出了问题,以及将来如何解决这些问题。
我也没有运气尝试过此查询:
queryOver.WhereRestrictionOn(x => …Run Code Online (Sandbox Code Playgroud) 我在进行配置转换、在 nuget 包安装上添加应用程序设置(其中元素appSetting可能存在或不存在)时遇到问题。
我想要发生的事情:
appSetting元素不存在
appSetting元素及其子元素appSetting元素存在
我只会让其中一个工作,但不会同时工作。
web.config.install.xdt
<?xml version="1.0"?>
<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
<appSettings xdt:Transform="InsertIfMissing" >
<add key="Swagger.Contact.Name" value="Some Name" xdt:Transform="InsertIfMissing" />
<add key="Swagger.Contact.Email" value="some@email.address" xdt:Transform="InsertIfMissing" />
</appSettings>
</configuration>
Run Code Online (Sandbox Code Playgroud)
之前的web.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" maxRequestLength="51200" />
<customErrors mode="Off" />
</system.web>
</configuration>
Run Code Online (Sandbox Code Playgroud)
appSettings转换前不存在的元素。
web.config之后
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<system.web>
<compilation debug="true" targetFramework="4.5.2" />
<httpRuntime targetFramework="4.5.2" maxRequestLength="51200" />
<customErrors mode="Off" />
</system.web> …Run Code Online (Sandbox Code Playgroud) 在我的情况下,为什么命名或位置查询参数不适用于 NHibernate?
认为以下陈述是正确的:
在 Oracle 数据库 X 和 Y 版本 11.2.0.3.0 上,存在由“MyPassword”标识的角色“MyRole”,并授予我连接的用户。
这是一些代码:
public void SetRole(string roleName, string rolePassword)
{
if (HasRoleBeenSet) return;
try
{
session.CreateSQLQuery("SET ROLE ? IDENTIFIED BY ?")
.SetString(0, roleName)
.SetString(1, rolePassword)
.ExecuteUpdate();
HasRoleBeenSet = true;
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
SetRole("MyRole", "MyPassword");
Run Code Online (Sandbox Code Playgroud)
抛出以下异常:
NHibernate.Exceptions.GenericADOException:无法执行本机批量操作查询:SET ROLE?由 ? [SQL: SET ROLE :p0 IDENTIFIED BY :p1] ---> System.Data.OracleClient.OracleException: ORA-01937: 角色名称丢失或无效
当我使用 Toad 套件中包含的 SQLMonitor 时,发送到数据库的 SQL 如下所示SET ROLE ? IDENTIFIED BY ?,错误Error occurred: …
查看 DryIoc的wiki,这些示例似乎与我需要的相反,我想知道是否可能相反?
维基(部分示例)
public interface X {}
public interface Y {}
public class A : X, Y {}
public class B : X, IDisposable {}
// Registers X, Y and A itself with A implementation
container.RegisterMany<A>();
...
Run Code Online (Sandbox Code Playgroud)
我想做以下事情
container.RegisterMany<X>();
// This would return one implementation each of A and B
container.ResolveMany<X>();
Run Code Online (Sandbox Code Playgroud)
然而,这给出了这个错误: "Registering abstract implementation type X when it is should be concrete. Also there is not FactoryMethod to use instead."
这是开箱即用的,还是我需要通过从程序集中获取接口的所有实现并对其进行循环并相应地注册来自己实现它?
更新
我看到这个例子对我来说可能有点简单,但对于上面的例子,@dadhi 提供的代码效果很好。
这是一个更“复杂”的案例
namespace …Run Code Online (Sandbox Code Playgroud)