标签: entity-framework-ctp5

存储库模式和导航属性

我只想知道编写存储库方法的最佳实践.问题是决定编写上下文没有延迟加载的存储库.如果它是GetById,你如何命名你的方法,但不清楚导航包含在实体中.

所以我想编写像GetUserByIdIncludedPosts这样的方法名称或者最好使用延迟加载激活的上下文?

如果我在方法名称中编写包含的属性,那么对于很少的导航属性来说,这将是非常烦人的长方法名称

.net c# entity-framework repository-pattern entity-framework-ctp5

8
推荐指数
1
解决办法
3009
查看次数

如何使用EF CTP5 Fluent API在一对多关系中关闭级联删除

在Fluent NHibernate中,您可以为映射设置级联设置,例如

public class StoreMap : ClassMap<Store>
{
  public StoreMap()
  {
    Id(x => x.Id);
    Map(x => x.Name);
    HasMany(x => x.Staff)
      .Inverse()
      .Cascade.None();
    HasManyToMany(x => x.Products)
     .Cascade.All()
     .Table("StoreProduct");
  }
}
Run Code Online (Sandbox Code Playgroud)

如何在实体框架"Code First"中完成这项工作?

.net entity-framework code-first entity-framework-4 entity-framework-ctp5

6
推荐指数
1
解决办法
3274
查看次数

EF4独立协会 - 为什么要避免它们?

我在MSDN上看到了这条评论(链接链接):

"请注意,通常应避免使用独立关联,因为像N-Tier和并发性这样的东西变得更加困难."

我是EF4的新手,我正在构建一个n-tier网络应用程序.这听起来像是一个重要的陷阱.有人可以向我解释这意味着什么吗?

foreign-keys associations n-tier-architecture entity-framework-4 entity-framework-ctp5

6
推荐指数
1
解决办法
2283
查看次数

LINQ to Entities无法识别该方法

我在MSDN上关注这篇文章.我把它移植到EF Code First.

public interface IUnitOfWork
{
    IRepository<Employee> Employees { get; }
    IRepository<TimeCard> TimeCards { get; }
    void Commit();
}
Run Code Online (Sandbox Code Playgroud)
public class HrContext : DbContext
{
    public DbSet<Employee> Employees { get; set; }
    public DbSet<TimeCard> TimeCards { get; set; }
    protected override void OnModelCreating(ModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Employee>()
                    .HasMany(e => e.TimeCards)
                    .WithOptional(tc => tc.Employee);
     }
}
Run Code Online (Sandbox Code Playgroud)
public class SqlRepository<T> : IRepository<T>
    where T : class
{
    private readonly DbSet<T> entitySet;
    public SqlRepository(DbContext context)
    {
        this.entitySet = context.Set<T>();
    }
    public …
Run Code Online (Sandbox Code Playgroud)

entity-framework code-first entity-framework-4 ef-code-first entity-framework-ctp5

6
推荐指数
1
解决办法
2926
查看次数

EF4与NHibernate相比如何?

有没有更好的?我听说过CodeFirst扩展,但是它已准备好进入黄金时段.请分享您在开发,任何性能开销等方面的经验.

nhibernate entity-framework fluent-nhibernate entity-framework-4 entity-framework-ctp5

6
推荐指数
1
解决办法
659
查看次数

实体框架CTP5代码优先 - 可以在非主键上进行实体拆分吗?

使用EF CTP5,我试图做一些实体拆分,其中实体是从两个单独的表构造的.如果两个表上的键不是主键,是否可以进行拆分?

例如,Id是我在Note实体上的主键.我想从单独的表中获取我的CreatedUser详细信息,但第二个表上的主键对应于Note实体中的CreatedUserId.

        modelBuilder.Entity<Note>()
            .Map(mc =>
            {
                mc.Properties(n => new
                {
                    n.Id,
                    n.Title,
                    n.Detail,
                    n.CreatedUserId,
                    n.CreatedDateTime,
                    n.UpdatedUserId,
                    n.UpdatedDateTime,
                    n.Deleted,
                    n.SourceSystemId,
                    n.SourceSubSystemId
                });
                mc.ToTable("Notes");
            })
            .Map(mc =>
            {
                mc.Properties(n => new
                {
                    n.CreatedUserId,
                    n.CreatedUser
                });
                mc.ToTable("vwUsers");
            });
Run Code Online (Sandbox Code Playgroud)

我看过注释只有在两个表中都存在实体主键时才能实现实体拆分?

提前致谢.

entity-framework code-first entity-framework-ctp5

6
推荐指数
1
解决办法
1270
查看次数

将EF CTP5与Sql Server Compact Edition 4.0一起使用时的EntityFunctions.TruncateTime替代方法

我正在使用EF CTP5代码优先使用Sql CE 4.0.我试图在两个DateTime属性之间执行时间不敏感的日期比较.

由于linq to entites无法解析DateTime.Date属性(本来不错),解决方案是使用EntityFunctions.TruncateTime,但这似乎不适用于Sql CE 4.0.

我可以手动比较这两个日期的年,月和日,这可行但是使代码比它应该更详细.理想情况下,我不想更改我的查询以使用长版本使它们与完整的sql server和sql ce 4.0一起使用.

因此,有没有人有任何干净,聪明的解决方案呢?我认为解决方案可能会涉及表达式重写,但我不太清楚从哪里开始.

任何帮助是极大的赞赏,

保罗

datetime linq-to-entities entity-framework sql-server-ce-4 entity-framework-ctp5

6
推荐指数
1
解决办法
1576
查看次数

实体框架CTP5(代码优先)建模 - 查找表

假设以下表结构:

表:

**Tasks**
taskID int PK
taskName varchar

**Resources**
resourceID int PK
resourceName varchar

**Assignments**
assignmentID int PK
taskID int FK
resourceID int FK
Run Code Online (Sandbox Code Playgroud)

赋值表将任务与分配给它的资源相关联.是否可以使用模型构建器映射此结构,以便我不必创建Assignment poco类 - 隐藏一些基础数据结构?

IE:

public class Task
{
    public int taskID { get; set; }
    public string taskName { get; set; }

    public virtual ICollection<Resource> resourceItems { get; set; }
}

public class Resource
{
    public int resourceID { get; set; }
    public string resourceName { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如何在不创建赋值poco类的情况下使用模型构建器将任务映射到资源?

entity-framework data-modeling code-first ef-code-first entity-framework-ctp5

6
推荐指数
1
解决办法
1328
查看次数

如何使用存储库模式急切加载子实体

我有一个名为的实体Tour可以有很多Agents.我可以添加代理,但我无法删除它们.

// _repo is injected....
var tour = _repo.GetById(tourId);
tour.AddAgent(new Agent(tour.TourId));
Run Code Online (Sandbox Code Playgroud)

当我尝试调用该Tour.RemoveAgent()方法时,实际上没有删除任何内容.我在Tour.RemoveAgent()方法中设置了一个断点,我看到该_agents属性的计数为0.

tour.RemoveAgent(agentId); // This doesn't work because _agents is empty
Run Code Online (Sandbox Code Playgroud)

_agents当我Tour从我的存储库中检索时,是否必须为EF填充属性做一些特殊操作?

更新:解决问题(感谢Paul的回答)

我决定只为每个聚合创建一个唯一的存储库,这样就可以很容易地定义使用该Include()函数需要包含的内容.这是我从GenericRepository<T>类继承的一个例子(它也包含在这个问题的底部).

public class TourRepository : GenericRepository<Tour>
{
    public TourRepository(IDatabaseFactory databaseFactory) : base (databaseFactory)
    {
    }

    public override Tour GetById(Guid id)
    {
        return dataContext.Tours
                .Include(x => x.Agents)
                .Single(x => x.TourId == id);
    }
}
Run Code Online (Sandbox Code Playgroud)

旅游类

public partial class Tour …
Run Code Online (Sandbox Code Playgroud)

poco entity-framework-4 ef-code-first entity-framework-ctp5

6
推荐指数
1
解决办法
8160
查看次数

实体框架4.1 - 如何"强制"EF转到数据库而不是使用图形?

这是场景,我有一个网站,在单个HTTP请求(HTTP POST)中,我需要执行以下操作:

  1. 抓住一个物体(让我们说"标签")
  2. 保存一些其他对象(让我们说"问题")
  3. 获取"标签"的新副本.
  4. 重定向到另一个页面,需要一个新的"标签"副本.

在幕后,2)涉及影响"标签"数据的数据库端触发器.

因此当我做3)时,EF从步骤1)拉出对象的相同副本,因为它在图形/内部存储器中(例如,相同的连接/上下文)

我需要一个"新鲜"的对象副本.

在过去,我已经使用过Detach,然后我执行EF查询和从数据库中获取的最新对象.

但我这里没有访问该对象(我有一个DTO,它从我的存储库返回),所以我没有任何东西可以传递给该Detach方法.

有什么方法可以说:

var fresh = db.Tags.Find(1, ignoreGraph: true)
Run Code Online (Sandbox Code Playgroud)

或者还有另一种选择吗?

如上所述,我在实体框架4.1,C#4(和ASP.NET MVC 3)

我现在能看到的唯一解决方案是将查询字符串参数传递给下一页,然后获取新副本(因为它是新的上下文,新图等).

c# entity-framework entity-framework-4 entity-framework-ctp5

6
推荐指数
1
解决办法
7535
查看次数