开始玩Visual Studio 2012 RC和Entity Framework 5 ...绝对喜欢它,但想知道是否有更清洁的方法来做到这一点.
我想删除每次解析XML的中间人,并通过.ToString()设置它.
public class MyEFEntity
{
[NotMapped()]
public XElement Tags {
get { return XElement.Parse(tags); }
set { tags = value.ToString(); } }
[Column("Tags", TypeName = "xml"), Required]
public string tags { get; set; }
}
Run Code Online (Sandbox Code Playgroud) 我有两个Entity Framework 5 Get()方法,它们执行(i)单个实体获取ID,以及(ii)单个实体通过过滤器获得任何急切加载螺栓.请参阅下面的代码:
internal readonly FallenNovaContext Context;
private readonly DbSet<TEntity> _dbSet;
internal GenericRepository(FallenNovaContext context)
{
Context = context;
_dbSet = context.Set<TEntity>();
}
// (i) Get by ID.
public TEntity GetById(int id)
{
return _dbSet.Find(id);
}
// (ii) Get by filter and optional eager loading includes.
public TEntity Get(
Expression<Func<TEntity, bool>> filter = null,
IEnumerable<string> includePaths = null)
{
IQueryable<TEntity> query = _dbSet;
if (filter != null)
{
query = query.Where(filter);
}
if (includePaths != …Run Code Online (Sandbox Code Playgroud) 典型的EF + MVC系统将具有两个或三个验证级别:
我找不到针对实际模型/实体/域/“业务规则”进行2 + 3验证的最佳实践。我们要么:
SaveChanges(),如果实体处于Added或Modified状态,则触发验证(一次验证整个实体)这很难维持。ViewModel验证有很多想法,但是对于Model验证,它是特定于领域的,因此您需要确定一个有创意的解决方案,而我的解决方案并不是那么好。
validation asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5
我正在按照本教程进行操作!一切都很好,博客名称从数据库中保存和检索(假设),因为它们显示在控制台中.然而,我在本地数据库中找不到为它创建的任何数据库,也没有在我的机器上找到sql express.如何在代码第一种方法中找到数据库的位置.
我有一个wpf项目4.5,我使用EF 5来生成模型类.我想为创建的EF类实现iNotifyPropertyChanged.所以我右键单击我的设计器(visual studio 2012)并将代码生成设置从"无"更改为"默认"
一旦我这样做,我得到了数百个错误,如下所示:
错误67'公共属性"TableColumnName" As "ColumnType"具有多个具有相同签名的定义.
[编辑1]
这些错误都在DataModel.Designer.Vb文件中抛出.它们出现在与另一个表中的列/导航属性同名的任何表列属性或导航属性上.我发现很难相信我不能在具有相同名称的不同表中使用列,这里必须进行其他操作.
[编辑2]
所以我从设计器中删除了所有数据库对象,然后将代码生成策略更改为默认值,然后在图中添加了一个表(客户端).我为表的每个属性得到了很多错误(所以这不能是因为其他表具有与我之前想到的相同的列名).我收到了上面列出的每个属性(表列)中的错误以及每个属性的以下错误:
错误变量'_ColumnName'与在类'client'中为属性'ColumnName'隐式声明的成员冲突.C:\ FTC_DAL.Designer.vb
当我将代码生成返回到无时,这就消失了.我盯着认为这是EF 5中的一个错误.
[编辑3]
重现步骤:
我在用:
我将安装sql server 2012 express,看看这是否有所不同
有人可以帮我弄清楚为什么会发生这些错误.
谢谢
我目前正在使用LINQ和Entity Framework 5.0编写基于Web的"配方"应用程序.我一直在努力解决这个问题,所以任何帮助都非常感谢!
将有一个搜索功能,用户可以在其中输入他们希望配方结果匹配的成分列表.我需要找到所有配方,其中关联的成分集合(名称属性)包含字符串列表中的每个记录的文本(用户搜索术语).例如,请考虑以下两个配方:
Tomato Sauce: Ingredients 'crushed tomatoes', 'basil', 'olive oil'
Tomato Soup: Ingredients 'tomato paste', 'milk', 'herbs
Run Code Online (Sandbox Code Playgroud)
如果用户使用搜索术语'番茄'和'油',它将返回番茄酱而不是番茄汤.
var allRecipes = context.Recipes
.Include(recipeCategory => recipeCategory.Category)
.Include(recipeUser => recipeUser.User);
IQueryable<Recipe> r =
from recipe in allRecipes
let ingredientNames =
(from ingredient in recipe.Ingredients
select ingredient.IngredientName)
from i in ingredientNames
let ingredientsToSearch = i where ingredientList.Contains(i)
where ingredientsToSearch.Count() == ingredientList.Count()
select recipe;
Run Code Online (Sandbox Code Playgroud)
我也尝试过:
var list = context.Ingredients.Include(ingredient => ingredient.Recipe)
.Where(il=>ingredientList.All(x=>il.IngredientName.Contains(x)))
.GroupBy(recipe=>recipe.Recipe).AsQueryable();
Run Code Online (Sandbox Code Playgroud)
谢谢您的帮助!
VS 2012(11.0.60315.01 Update 2),C#5,Entity Framework 5.0.0.0(Runtime v4.0.30319)
我知道过去曾发布类似的问题,但似乎没有答案.我想我理解错误,但我更感兴趣的是找到"理想的"解决方案. 我想要做的就是从Child表中删除一条记录. 有人可以帮忙吗?
这是一个完整而简单的例子.在调用SaveChanges()抛出以下异常:
"操作失败:由于一个或多个外键属性不可为空,因此无法更改关系.当对关系进行更改时,相关的外键属性将设置为空值. foreign-key不支持空值,必须定义新关系,必须为foreign-key属性分配另一个非null值,或者必须删除不相关的对象."
代码如下所示:
using System.Linq;
namespace EFDeleteTest
{
class Program
{
static void Main(string[] args)
{
using (EFTestEntities context = new EFTestEntities())
{
var parent = context.Parents.Single(p => p.Id == 1);
var child = parent.Children.Single(c => c.Id == 1);
parent.Children.Remove(child);
context.SaveChanges(); // Throws the above Exception
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
数据库看起来像这样:
Parent
Id (PK, int, not null) IDENTITY
Name (nvarchar(50), null)
Child
Id …Run Code Online (Sandbox Code Playgroud) 我意外删除了__MigrationHistory中的记录.尝试Add-Migration进行模型更改时,我收到以下错误消息.
无法生成显式迁移,因为以下显式迁移正在等待:[201303101108238_InitialCreate,201304020555457_xxx,201305070251407_xxx,201306090833462_xxx,201306140437274_xxxx].在尝试生成新的显式迁移之前应用挂起的显式迁移.
如果运行它将收到以下错误Update-Database.
数据库中已经有一个名为"TableName"的对象.
我能做些什么让它发挥作用?
我需要获取一组实体的特定属性的不同值的列表。
因此,假设表A具有字段x,y,z,1、2、3,其中x是PK(因此不在表中)。
我需要获取y,z,1、2或3的所有唯一值,而不必在我的方法中知道我要获取哪个字段。因此,该方法的模式为:
public List<ObjectName> GetUniqueFieldValues(string fieldname)
Run Code Online (Sandbox Code Playgroud)
“ ObjectName”对象是具有两个属性的对象,以上方法将为每个结果填充至少一个属性。
另一个问题中的某个人使用ParameterExpression和Expression类也有类似的答案,但实际上并没有提供足够的信息来帮助我完成特定任务。
我也尝试过反射,但是Linq在Select表达式中当然不太喜欢它。
我只会使用if并将其命名为好,但是实际表/对象中确实有大量字段/属性,因此这是不切实际的。如果基表发生变化,这也将为我节省一些重构。
我要执行的SQL版本:
SELECT Distinct [usersuppliedfieldname] from TableName where [someotherconditionsexist]
Run Code Online (Sandbox Code Playgroud)
我已经拥有的伪代码:
public List<ReturnObject> GetUniqueFieldValues(int FkId, ConditionObject searchmeta)
{
using(DbEntities db = new DbEntities())
{
// just getting the basic set of results, notice this is "Select *"
var results = from f in db.Table
where f.FkId == FkId && [some static conditions]
select f;
// filtering the initial results by some criteria in the "searchmeta" object
results = ApplyMoreConditions(results, searchmeta); …Run Code Online (Sandbox Code Playgroud) 我在使用EF Codefirst正确保存多对多关系时遇到问题.我已正确建模我的类并使用Fluent-API正确建模连接表.我认为这个问题与使用断开连接的DTO有关.当我将更改保存到父实体(公寓)时,父实体(例如Title和UserId)上的scalular属性保存正确,但对子实体(设施)的更改不会保存到多对多表.
这是有助于澄清事物的代码流:
public ICommandResult Execute(CreateOrUpdateCondoCommand command)
{
ICollection<Amenity> amenities = new List<Amenity>();
foreach (var item in command.Amenities)
{
Amenity amenity = new Amenity { AmenityId = item.AmenityId };
amenities.Add(amenity);
}
var condo = new Condo
{
[...other properties]
Title = command.Title,
Amenities = amenities
};
if (condo.CondoId == 0)
{
condoRepository.Add(condo);
}
else
{
condoRepository.Update(condo);
}
unitOfWork.Commit();
return new CommandResult(true);
}
/// <summary>
/// Updates the entity.
/// </summary>
/// <param name="entity">The entity</param>
public virtual void Update(T entity)
{ …Run Code Online (Sandbox Code Playgroud)