标签: entity-framework-5

实体框架5和XElement字段

开始玩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)

c# xml xelement entity-framework entity-framework-5

5
推荐指数
1
解决办法
1913
查看次数

使用包含检索实体的通用存储库和实体框架逻辑

我有两个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)

c# entity-framework-5

5
推荐指数
1
解决办法
3409
查看次数

验证域模型:如何以及在何处

典型的EF + MVC系统将具有两个或三个验证级别:

  1. 对于ViewModel:输入/物理验证(DataAnnotations,FluentValidation),换句话说,长度,空值,范围,正则表达式等。
  2. 对于模型:输入/物理验证(如果不使用MVC且数据来自另一个系统,WCF,表单等,则重复1)
  3. 对于模型:逻辑/“业务规则”验证

我找不到针对实际模型/实体/域/“业务规则”进行2 + 3验证的最佳实践。我们要么:

  • 将简单的验证规则放在实体的属性设置器中(但这确实很麻烦)
  • 挂钩到EF SaveChanges(),如果实体处于AddedModified状态,则触发验证(一次验证整个实体)

这很难维持。ViewModel验证有很多想法,但是对于Model验证,它是特定于领域的,因此您需要确定一个有创意的解决方案,而我的解决方案并不是那么好。

  • 是否有更好的方法或有用的工具(例如DataAnnotations或FluentValidation,但适用于域实体)?
  • 进行模型验证或触发模型验证的最佳位置在哪里?

validation asp.net-mvc entity-framework asp.net-mvc-4 entity-framework-5

5
推荐指数
1
解决办法
1145
查看次数

实体框架5代码优先 - 创建数据库的位置

我正在按照本教程进行操作!一切都很好,博客名称从数据库中保存和检索(假设),因为它们显示在控制台中.然而,我在本地数据库中找不到为它创建的任何数据库,也没有在我的机器上找到sql express.如何在代码第一种方法中找到数据库的位置.

ef-code-first dbcontext entity-framework-5

5
推荐指数
1
解决办法
4399
查看次数

在实体框架5中将代码生成从无变为默认后出现错误

我有一个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]

重现步骤:

  1. 在Visual Studio 2012中创建新项目,wpf应用程序.
    它可以是vb或c,我测试了两者
  2. 添加ADO.NET实体数据模型(edmx文件)
  3. 从sql server添加一个表(我使用的是Express 2008 R2)
  4. 构建项目,然后在空白区域单击edmx设计器.在属性窗口中,将代码生成策略更改为默认值而不是.
  5. 构建项目,将出现错误.

我在用:

  • visual studio 2012 pro v.11.0.51106.01 update 1
  • .NET 4.5.50709
  • Windows 8专业版

我将安装sql server 2012 express,看看这是否有所不同

有人可以帮我弄清楚为什么会发生这些错误.

谢谢

.net entity-framework visual-studio entity-framework-5

5
推荐指数
2
解决办法
4551
查看次数

LINQ to EF - 查找子集合的字符串属性至少部分匹配字符串列表中的所有记录的记录

我目前正在使用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)

谢谢您的帮助!

linq entity-framework entity-framework-5

5
推荐指数
1
解决办法
2120
查看次数

实体框架5 - 删除子记录

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)

c# entity-framework-5 visual-studio-2012

5
推荐指数
1
解决办法
1万
查看次数

__MigrationHistory中意外删除的记录?

我意外删除了__MigrationHistory中的记录.尝试Add-Migration进行模型更改时,我收到以下错误消息.

无法生成显式迁移,因为以下显式迁移正在等待:[201303101108238_InitialCreate,201304020555457_xxx,201305070251407_xxx,201306090833462_xxx,201306140437274_xxxx].在尝试生成新的显式迁移之前应用挂起的显式迁移.

如果运行它将收到以下错误Update-Database.

数据库中已经有一个名为"TableName"的对象.

我能做些什么让它发挥作用?

.net c# entity-framework ef-code-first entity-framework-5

5
推荐指数
1
解决办法
2232
查看次数

实体框架/ Linq-获取动态指定属性的不同值

我需要获取一组实体的特定属性的不同值的列表。

因此,假设表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)

c# linq entity-framework-5

5
推荐指数
1
解决办法
2770
查看次数

实体框架与Codefirst,通用存储库,工作单元模式保存多对多关系

我在使用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)

c# asp.net-mvc entity-framework entity-framework-5

5
推荐指数
1
解决办法
3445
查看次数