标签: entity-framework-5

如何在加载后使用POCO和DbContext在Entity Framework中初始化对象?

我正在使用EF5.我想初始化DbContext中包含的DbSet集合的每个对象,最好(但不一定)在对象字段(但不一定是与其他POCO的关系)之后初始化.这可能缩短为"施工后拦截"或"后加载拦截".

初始化需要使用与DbContext实例并行的对象实例(当前用户设置等)设置对象的某些属性.

所以基本上:

var settings = new Settings();
settings.PrintName = false;

var context = new MyDbContext();
// here initialize context so that every User object get initialized with settings
var john = context.Users.Where(x => x.Name == "John").FirstOrDefault();
Assert.AreEqual(john.Settings, settings);
Run Code Online (Sandbox Code Playgroud)

除了循环遍历集合中的所有对象并手动设置属性之外,实现此目的的可能方法是什么?

c# entity-framework poco dbcontext entity-framework-5

2
推荐指数
1
解决办法
3601
查看次数

如何创建和使用泛型类EntityTypeConfiguration <TEntity>

我的应用程序中有两个非常简单的接口

表示保存在数据库中的实体

public interface IEntity
{
    int Id { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

只有Nome字段作为保存实体的必填字段的实体

public interface IEntityName : IEntity
{
    string Nome { get; set; }
}   
Run Code Online (Sandbox Code Playgroud)

许多类实现了这个接口

public class Modalidade : IEntityName
{
    public int Id { get; set; }
    public string Nome { get; set; }
}
public class Nacionalidade : IEntityName
{
    public int Id { get; set; }
    public string Nome { get; set; }
}

public class Profissao : IEntityName
{
    public …
Run Code Online (Sandbox Code Playgroud)

ef-code-first ef-migrations entity-framework-5

2
推荐指数
1
解决办法
2482
查看次数

EF 5更新N级深度对象图?

这是情况,我有三个实体有以下关系:

-Team one-to-one TeamContact
-TeamContact one-to-one TeamAddress
Run Code Online (Sandbox Code Playgroud)

我已经设法创建,添加和保存这些对象没有任何问题.但是,当我尝试创建编辑方法时,修改后只保存父对象.见下面我到目前为止的情况;

在我的Db类中保存方法

public void SaveTeam(Team team)
    {
        if (team.Id == 0)
        {
            context.Teams.Add(team);
        }
        else
        {
            var model = context.Teams.Find(team.Id);
            context.Entry(model).CurrentValues.SetValues(team);
        }
        context.SaveChanges();
    }
Run Code Online (Sandbox Code Playgroud)

编辑方法

[HttpGet]
    public ActionResult Edit(int id)
    {
        var model = _dataSource.Teams.FirstOrDefault(t => t.Id == id);
        return View(model);
    }

    [HttpPost]
    public ActionResult Edit(Team team)
    {
        if (ModelState.IsValid)
        {
            _dataSource.SaveTeam(team);

            return RedirectToAction("Detail", "Team", new { id = team.Id });
        }
        return View(team);
    }
Run Code Online (Sandbox Code Playgroud)

就像我上面所说,我只能让我修改父对象,我在这里错过了什么?

试着

 public void SaveTeam(Team team)
    {
        if …
Run Code Online (Sandbox Code Playgroud)

c# code-first asp.net-mvc-4 asp.net-4.5 entity-framework-5

2
推荐指数
1
解决办法
3161
查看次数

为什么我无法将实体框架迁移到初始状态?

我从项目中删除了开发数据库和Migrations文件夹.使用单元测试运行时,将重新创建项目开发数据库.我不明白为什么运行update-database给了我

PM> Update-Database
Specify the '-Verbose' flag to view the SQL statements being applied to the target database.
Applying code-based migrations: [201302201840012_wieleDoWielu].
Applying code-based migration: 201302201840012_wieleDoWielu.
Run Code Online (Sandbox Code Playgroud)

为什么要迁移:201302201840012_wieleDoWielu会被记住?我该如何删除它?存放在哪里?

最好的问候PrzemysławStaniszewski

entity-framework ef-migrations entity-framework-5

2
推荐指数
1
解决办法
5194
查看次数

默认情况下LINQ和Entity Framework的加载程度如何?

我是LINQ和实体框架的新手.我一直在使用以下方法从数据库中获取集合:

var Publications = from pubs in db.RecurringPublications
                   select pubs;
Run Code Online (Sandbox Code Playgroud)

Publications表通过外键链接到其他表.我一直用它来引用这样的属性:

Publications.Single().LinkedTable.LinkedTableColumn
Run Code Online (Sandbox Code Playgroud)

有时甚至在链条的下游:

Publications.Single().LinkedTable.LinkedTable.LinkedLinkedTableColumn
Run Code Online (Sandbox Code Playgroud)

我知道你可以指定延迟加载或急切加载,我想知道默认情况下它是如何处理的.默认情况下是否有最大深度?它是否计算出在编译时使用多少连接?

.net c# linq entity-framework entity-framework-5

2
推荐指数
1
解决办法
409
查看次数

类型未映射实体框架5.0

我首先关注EF代码的视频.

我试图按照VS 2012控制台应用程序中的确切步骤操作,请参阅下面的代码,

class Program
{
    static void Main(string[] args)
    {
        using (var context = new EftDbContext())
        {
            context.Blogs.Add(new Blog { Name = "ASP.NET" });
            context.SaveChanges();

            var blogs = from n in context.Blogs
                        orderby n.Name
                        select n;

            foreach (var b in blogs)
            {
                Console.WriteLine(b);
            }
        }
    }

    public class Blog
    {
        public int BlogId { get; set; }
        public string Name { get; set; }

        public virtual List<Post> Posts { get; set; }
    }

    public class Post
    { …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework entity-framework-5

2
推荐指数
1
解决办法
4059
查看次数

ASP.NET MVC 4 - 如何在编辑和保存数据时使用viewmodel

mvc 4使用sql server 2008,代码优先,ef5

我有一个与视图关联的ViewModel.

作为起点,我正在修改VS创建的脚手架.

我可以填写表格.

当用户单击"保存"时 - 这是脚手架中的代码:

 [HttpPost]
 public ActionResult Edit(Place place)
 {
 if (ModelState.IsValid)
    {
       db.Entry(place).State = EntityState.Modified;
       db.SaveChanges();
       return RedirectToAction("Index");
    }
 return View(place);
Run Code Online (Sandbox Code Playgroud)

地方是一个模型.我需要将viewmodel(包括地点)传递给它.

如何使用EF将viewmodel保存在数据库中?我是否必须先将其拆分为模型?

当我尝试时,我收到此错误:

Store update, insert, or delete statement affected an unexpected number of rows (0). Entities may have been modified or deleted since entities were loaded. Refresh ObjectStateManager entries.
Run Code Online (Sandbox Code Playgroud)

当我调试它时,似乎PlaceID(来自模型)从传递回控制器httpPost Edit控制器的模型中丢失 - 也许这是错误的来源?

有没有在线最佳实践的例子 - 我找不到任何东西.

谢谢.

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

2
推荐指数
1
解决办法
3182
查看次数

"已经有一个与此命令关联的开放式数据加载器" - 即使使用Include()

我正在尝试加载所有Dish对象.Dish并且DishImages具有一对多的关系,即a Dish可以有许多DishImage与之关联的s.

这是两个类的代码.

  1. DishImage

这是我试图在动作方法中检索它的方式:

    [ChildActionOnly]
    public PartialViewResult TopDishes()
    {
        IEnumerable<Dish> topDishes = dishRepository.Dishes.Include( d => d.DishImages );                                                        
        return PartialView(topDishes);
    }
Run Code Online (Sandbox Code Playgroud)

以下是查看代码:

  @model IEnumerable<RestaurantHub.Domain.Entities.Dish>

 @foreach (var dish in Model)
 {
    <div class="top-ten-offers-list">

      <div class="top-ten-offer">
        <p class="top-ten-deal-description">
            @dish.Description
        </p>

        <img src="@dish.DishImages.First().ImagePath" />
        <p class="top-ten-deal-title">@dish.Name</p>
     </div>

   </div>
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了他们大多数建议使用的几个SO问题Include()(我正在做),其他人建议将MARS设置为true.我相信我在这里错过了一些微妙的观点.任何帮助表示赞赏.

调试信息:

如果我将代码调试到action方法,我可以验证(通过枚举结果)正在加载正确的数据.但是当控件foreach在视图中到达循环时,它会抛出上述错误.

如果我@dish.DishImages.First().ImagePath从视图中删除该行,它工作正常,但我没有得到任何图像.

结果集的调试视图

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

2
推荐指数
1
解决办法
1232
查看次数

实体框架代码第一树模型

我有以下实体:

public class Module
{
    public Module()
    {
        SubModules = new List<Module>();
    }

    public int Id { get; set; }
    public string Title { get; set; }
    public string Action { get; set; }
    public string Controller { get; set; }
    public string Icon { get; set; }

    public List<Module> SubModules { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

其中,当通过Code First初始化时,生成下表Schema:

CREATE TABLE [dbo].[Modules](
    [Id] [int] IDENTITY(1,1) NOT NULL,
    [Title] [nvarchar](max) NULL,
    [Action] [nvarchar](max) NULL,
    [Controller] [nvarchar](max) NULL,
    [Icon] [nvarchar](max) NULL,
    [Module_Id] [int] …
Run Code Online (Sandbox Code Playgroud)

ef-code-first entity-framework-5

2
推荐指数
1
解决办法
4481
查看次数

如何使用Entity Framework 5在测试数据库和生产数据库之间切换

我的ASP.NET MVC 4应用程序有单独的测试和生产数据库.使用Entity Framework 5,如何以编程方式在这两个数据库之间切换Entity Framework?应用程序知道应该在哪个时间使用哪个数据库,因此我只需要应用程序能够更改实体框架,以便它在正确的时间使用正确的数据库.

任何人都知道如何完成这个和/或有一个很好的例子?


编辑:由于我的应用程序的安排,我将需要使用GvM的答案.然而,最后一件事是,我不知道如何向基类发送参数.这就是我的意思:

public class YourContext : DbContext {

    public YourContext() : base("yourNameOrConnectionString")
    {
    }

}
Run Code Online (Sandbox Code Playgroud)

问题是这段代码不起作用:

string dbConnectionString = "MyDBTest";

using (var db = new YourContext(dbConnectionString))
{
    //code to use the db
}
Run Code Online (Sandbox Code Playgroud)

如何将参数发送到基类,在本例中为YourContext():base()

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

2
推荐指数
1
解决办法
4163
查看次数