首先,我想说我读了相关帖子(特别是EF 4.1 SaveChanges没有更新导航或参考属性,实体框架代码优先 - 为什么我不能用这种方式更新复杂属性?和Entity Framework 4.1 RC(代码优先) - 实体不通过关联更新).
但是,我无法解决我的问题.我对Entity Framework很新,所以我想我一定是误解了这些帖子的答案.无论如何,我真的很感激有人可以帮助我理解,因为我很困惑.
我有两张桌子:
Person Item有一个可空PersonId和一个Type项目可以拥有所有者,也可以不拥有.因此,Person具有ItemsIEnumerable的属性Item.
一个人只能Item按类型拥有一个.如果该人想要改变,他可以用他的物品中任何其他相同类型的物品替换他当前的物品:
public class MyService
{
private PersonRepo personRepo = new PersonRepo();
private ItemRepo itemRepo = new ItemRepo();
public void SwitchItems(Person person, Guid newItemId)
{
using (var uof = new UnitOfWork())
{
// Get the entities
Item newItem = itemRepo.Get(newItemId);
Item oldItem = person.Items.SingleOrDefault(i => i.Type == …Run Code Online (Sandbox Code Playgroud) 我一直试图理解为什么Oracle会在几天内提出这个错误,但找不到任何能帮助我阅读所有相关主题的解决方案.我希望有人会帮助我.我正在研究这个问题:
SELECT distinct c.NAME, c.SUPERVISIONNAME, c.INTERNALADDRESS, c.IM, c.ID, c.LINK, c.IW, d.NAME, t.NAME
FROM "CONCENTRATOR" c
LEFT OUTER JOIN "CONCENTRATOR_GROUP" USING(CONCENTRATOR_ID)
LEFT OUTER JOIN "GROUP" g USING(GROUP_ID)
LEFT OUTER JOIN "TYPE" t USING(TYPE_ID)
LEFT OUTER JOIN "DEPARTMENT" d USING(DEPARTMENT_ID)
WHERE TRIM(UPPER(t.NAME)) = 'type'
ORDER BY im DESC, id DESC, link DESC, iw DESC, TRIM(UPPER(d.name)) ASC, TRIM(UPPER(c.name)) ASC;
Run Code Online (Sandbox Code Playgroud)
这在SQL Developer上完全正常,但在Java中运行时会引发此错误:
java.sql.SQLSyntaxErrorException: ORA-00918: column ambiguously defined
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:445)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:879)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:450)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:192)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:531)
at oracle.jdbc.driver.T4CPreparedStatement.doOall8(T4CPreparedStatement.java:207)
at oracle.jdbc.driver.T4CPreparedStatement.executeForDescribe(T4CPreparedStatement.java:884)
at …Run Code Online (Sandbox Code Playgroud) 我首先使用EF代码编写ASP.NET MVC项目,我面临的情况是需要通过枚举描述进行排序:
public partial class Item
{
public enum MyEnumE
{
[Description("description of enum1")]
Enum1,
[Description("description of enum2")]
Enum2,
...
}
public MyEnumE MyEnum { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
这是Search和SortAndPaginate功能:
public async Task<IPagedList<Item>> Search(ItemCriteria criteria, SortableTypeE sortName, SortOrder.TypeE sortOrder, int pageNb)
{
var itemFilter = GenerateFilter(criteria);
var items = entities.Items.Where(itemFilter);
return await SortAndPaginate(items, sortName, sortOrder, pageNb);
}
private async Task<IPagedList<Item>> SortAndPaginate(IQueryable<Item> items, SortableTypeE sortName, SortOrder.TypeE sortOrder, int pageNb)
{
IOrderedQueryable<Item> result = null;
switch (sortName)
{ …Run Code Online (Sandbox Code Playgroud) 我对如何在 Linq to Entities 中链接两个列表感到Linq很困惑。EF
我首先使用数据库,并且有两个表:
Person,带有列Id
和
Ability,带有列Id,PersonId并且Value
因此,Person类有一个ICollection<Ability>, 称为AllAbilities.
在某些视图的 ViewModel 中,我返回一个 int 列表,表示用户输入的文本框值Ability.Value,称为AbilitiesInput。我的需求很简单,在控制器中我必须调用一个查询来执行以下操作:
GetAll(person =>
for(i = 0; i < AbilitiesCount; i++) { person.AllAbilities[i] > AbilitiesInput[i] }
)
Run Code Online (Sandbox Code Playgroud)
其中GetAll方法看起来像我的通用存储库中的那样:
public virtual async Task<List<TEntity>> GetAll(
Expression<Func<TEntity, bool>> wherePredicate = null
{ ... }
Run Code Online (Sandbox Code Playgroud)
要继续,我只需要一个布尔值,它可以检查 every 是否AllAbilities[i]高于AbilitiesInput[i],但我尝试的任何方法都不起作用。
我尝试更改AbilitiesInput为List<KeyValuePair>or …