我有一个实体Person,它有一个与之关联的位置列表.我需要查询人员表并从位置列表(标准)中获取至少有一个位置的所有人员.以下工作但效率很低:
var searchIds = new List<int>{1,2,3,4,5};
var result = persons.Where(p => p.Locations.Any(l => searchIds.Any(id => l.Id == id)));
Run Code Online (Sandbox Code Playgroud)
这适用于小型列表(例如5-10个searchIds和5-10个位置的人.问题是有些人可能有100个位置,搜索也可以同时用于100个位置.当我尝试执行上述操作时EF实际上产生了一个2000+以上的SQL语句并因为嵌套太深而失败.虽然嵌套本身已经是一个问题,即使它可以工作,我仍然不会发生2000+ SQL语句.
注意:真正的代码还包括多个级别和父子关系,但我确实设法只使用id而不是完整对象将其归结为这个相当扁平的结构
在EF中实现这一目标的最佳方法是什么?
我在实体框架中遇到了映射问题.
我有以下课程(简化):
public class Building
{
public int ID { get; set; }
// *.. snip..* other properties
public Location Location { get; private set; }
}
public class Location
{
public string Street {get; set;}
public Country country {get; set}
}
public class Country
{
public int ID { get; set; }
public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
Building和Country是实体,它们保存在数据库中.位置是值类型,应映射到与Building相同的表.
但是,当我以这种方式映射它时,实体框架也希望将Location映射到一个表,并抱怨它没有Key.我不想给它一把钥匙,因为它属于建筑物,根本不应该是一个实体.
我已经看到了一些解决方法,说你需要将Country放在Building-class上,但这感觉不好(并且在语义上是完全错误的).
我正在使用Entity Framework 5
我遇到了IIS和ACL的问题.
我在专用的AppPool下配置了一个MVC应用程序.apppool在ApplicationPoolIdentity(在我的情况下是用户IIS AppPool\accountinfo.local =与我的网站同名)下运行.
我在根文件夹上完全控制了该用户,并确保继承了权限.
当我访问主页时它运行正常,我可以访问它.但是,当我尝试访问我的静态内容时,它位于子文件夹(Content/Site.css)中,我收到错误401.3.
我确保权限是继承的,如果我转到有效权限,我可以看到该用户确实拥有完全控制权.
我已启用失败的请求跟踪和安全审核,但我没有得到任何日志文件,也没有事件查看器中的任何事件.
我在这里错过了什么?
我试图在Powershell中替换部分字符串.但是,替换字符串不是硬编码的,它是根据函数计算的:
$text = "the image is -12345-"
$text = $text -replace "-(\d*)-", 'This is the image: $1'
Write-Host $text
Run Code Online (Sandbox Code Playgroud)
这给了我正确的结果:"这是图像:12345"
现在,我想要包含base64编码的图像.我可以从id读取图像.我希望以下内容可行,但它不会:
function Get-Base64($path)
{
[convert]::ToBase64String((get-content $path -encoding byte))
}
$text -replace "-(\d*)-", "This is the image: $(Get-Base64 '$1')"
Run Code Online (Sandbox Code Playgroud)
它不起作用的原因是因为它首先将$1(字符串,而不是值$1)传递给函数,执行它然后才进行替换.我想做的是
我想创建一个具有泛型类型参数的类,该参数具有成为另一个泛型类的子类的约束。
例子:
public class SomeGeneric<T> where T : new()
{
T CreateItem() => new T();
}
Run Code Online (Sandbox Code Playgroud)
我想创建这个类。注意:我不希望此类的客户端指定内部类型参数两次:
public class TheClass<TGeneric> where TGeneric : SomeGeneric<T>, new()
{
public T Item {get; private set;}
public void TheClass
{
var instance = new TGeneric(); // this is possible because of the new() restriction
Item = instance.CreateItem();
}
}
Run Code Online (Sandbox Code Playgroud)
然后可以按如下方式使用:
class AnotherClass
{
}
class Client : TheClass<SomeGeneric<AnotherClass>>
{
public void SomeMethod()
{
var theInstanceOfAnotherClass = this.Item;
// Do stuff with it
}
} …Run Code Online (Sandbox Code Playgroud) 我已经能够在我正在设计的形式中使用具有最小和最大属性的输入类型日期尽可能地利用HTML 5.然而,如果输入类型是时间,我无法做同样的事情.
相关代码:
<input style='width:120px' required name='dia' id='dia' type='date' min="1991-01-01" max="2014-05-12">
<input style='width:80px' required name='hora' id='hora' type="time" min="08:00:00" max="20:00:00"/>
Run Code Online (Sandbox Code Playgroud)
(忽略后者的最小值和最大值)
其他相关信息:
据我所知,HTML 5规范在两种情况下都允许min和max.
我正在为此表单使用minimizr和webshims,这使得输入日期字段可用于FF等.
在最近的主要浏览器之间没有检测到不同
像W3C学校这样的网站提到了日期的最小值和最大值,但没有提到时间,这可能表明普通缺乏对最小值和最大值的热情作为时间属性.
我错过了一些明显的东西吗
我正在构建一个通用的查询调度程序.这个想法如下:
IQuery<T>表示查询对象的通用接口IQuery<T>)IQueryHandler<TReturnType, TQuery>具有单个方法的通用接口,该方法接收TQuery(具有约束TQuery: IQuery<TReturnType>)并返回aTReturnTypeIQueryHandler接收具体ConcreteQuery并返回TQueryQueryDispatcher有一个接收Query并返回结果的方法.具体类将从DI容器中查找正确的处理程序.问题是当我调用Fetch方法时,我没有得到类型推断QueryDispatcher.有什么我可以做的类型推断或这只是c#的限制?
从理论上讲,它应该知道类型参数是什么,因为它接收的参数TQuery有一个约束IQuery<TReturnType.
这是代码:
class ConcreteClass // This is the class of which I want to query objects
{
}
Run Code Online (Sandbox Code Playgroud)
查询界面+具体查询类
interface IQuery<T>
{
}
public class ConcreteQuery : IQuery<ConcreteClass>
{
}
Run Code Online (Sandbox Code Playgroud)
QueryHandler接口+具体的查询处理程序
interface IQueryHandler<TReturnType, TQuery> where TQuery : IQuery<TReturnType>
{
TReturnType Fetch(TQuery query);
}
class ConcreteQueryHandler : IQueryHandler<ConcreteClass, ConcreteQuery>
{
ConcreteClass …Run Code Online (Sandbox Code Playgroud) 我目前每个聚合根和两个聚合根有一个事件流,Room并且RoomType.
a的行为Room取决于它的含义RoomType.为了分离两个聚合,The在聚合RoomType中仅表示为roomTypeId Room.更改RoomType由RoomTypeChanged事件表示.
该RoomTypes可单独管理,并需要在不同的骨料.
现在考虑以下用例:
当用户使a无效时RoomType,所有Rooms具有该功能的Roomtype应该切换到回退RoomType.
我想到了几种方法,但所有方法似乎都有问题:
让一个事件监听器监听一个RoomTypeInvalidated-event,然后发送一个有SwitchToFallbackRoomType所有的Room-aggregates Roomtype.我怎么会这样做?Roomtype除非我访问我的readmodel,这似乎是不正确的,否则无法知道哪些聚合有.即使我要加载所有聚合,也无法仅加载该类型的聚合,因为我无法加载所有流的子集(使用geteventstore).
当重新将RoomTypeChanged-events应用于Room聚合时,而不仅仅是应用它,检查是否RoomType仍然存在,但是再次,我怎么知道哪个RoomTypes存在(我和1的情况相同,但是反转) ?此外,在重新应用事件时加入逻辑似乎是错误的,它们应该只代表我认为的状态变化.
你怎么解决这个问题?
我正在执行FetchClient的提取请求(通过Aurelia包装器)。
提取客户端具有三种模式:
遵循,错误和手动(我将放弃此问题的错误)
如果使用跟随,则获取客户端会自动遵循重定向。问题是我的原始请求使用基本身份验证。它适用于原始请求,但使用这些基本身份验证凭据的重定向URL失败。
如果我使用“手动”模式,则不会继续进行,但是我无法访问重定向资源的“位置”,并且无法获得重定向资源的正确URL。
我该如何解决?
要么是我可以访问完整响应的模式,要么是允许我在请求重定向资源之前修改标头的拦截器。
是否可以创建泛型Func<T><T>,如在Func中接受泛型参数并需要返回该泛型参数的类型?
换句话说,我可以这样做吗?
Func<T> createNull = () => default(T);
Run Code Online (Sandbox Code Playgroud)
请注意,我没有包含类或方法的任何上下文,所以我想这样做:
var user = createNull<User>();
Run Code Online (Sandbox Code Playgroud)
这里有一些关于我正在尝试做什么的信息.(注意语法是关闭的,因为我不知道该怎么做,也不知道它是否可能):
Func<TQuery, TResult><TQuery, TResult> query = q =>
(TResult) handlers[Tuple.Create(typeof(TQuery), typeof(TResult))](q);
Run Code Online (Sandbox Code Playgroud)
处理程序声明如下:
var handlers = new Dictionary<Tuple<Type, Type>, Func<TQuery, TResult><TQuery, TResult>();
// examples
handlers.Add(Tuple.Create(typeof(ById), typeof(User)),
idQuery => new User());
handlers.Add(Tuple.Create(typeof(ByName), typeof(Customer)),
otherQuery => new Customer());
Run Code Online (Sandbox Code Playgroud)
然后我想这样用query:
User result = query<User, IdQuery>(new ById{Id = 1});
Customer result1 = query<Customer, ByName>(new ByName());
Run Code Online (Sandbox Code Playgroud) 我不是一个经验丰富的MVC3开发人员,但我想成为.我熟悉POCO类和ViewModels,因为前者描述了数据库的每个类,后者用于mvc3中的强类型视图.对于经验丰富的开发人员来说,我的问题并不复杂,但我对此感到有些困惑.
问题是,我有一个包含三个项目的解决方案;
.
public class Service
{
[Key]
[DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)]
public int ServiceID { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(30)]
[LocalizedAttribute("Name")]
public string Name { get; set; }
//------------------------------------------------------------//
[MaxLength(100)]
[LocalizedAttribute("Description")]
public string Description { get; set; }
//------------------------------------------------------------//
[Required]
public long ModifiedByUserID { get; set; }
[ForeignKey("ModifiedByUserID")]
public virtual User OperatorUser { get; set; }
//------------------------------------------------------------//
[Required, MaxLength(10)]
public int ModifiedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
存储库和UnitOf Work类库
MVC应用程序
现在,我是否正确地解决了POCO课程?(我当然使用EF Code First生成数据库)如果是,那么它们也被推断为ViewModels吗?我用它们来生成强类型视图.
定义POCO类和ViewModel的最佳和实际标准方法是什么?
我很感激任何善意的指导,
我正在尝试从长文本中提取文件名.
Page source.html鉴于以下文字:
Page source file:///somedir/subdir/subdir/mysource.html lorem ipsum more text
Lorem Ipsum ...
Lorem Ipsum Page source file:///anotherdir/sub/dir/anothersource.html
Run Code Online (Sandbox Code Playgroud)
我想要一个所有文件名的列表:
mysource.html
anothersource.html
Run Code Online (Sandbox Code Playgroud)
我一直在尝试使用以下正则表达式:
// this only gets the last one (because of the greedy .*)
Page source.*\/(.*\.html)
// This gets all occurrences, but the value in my capture group is the
// complete path starting after the first occurrence of /
Page source.*?\/(.*?\.html)
Run Code Online (Sandbox Code Playgroud)
我怎么能告诉正则表达式引擎对外表达式不贪婪,但仍然贪婪到最后/才能到达该.html部分之前?