标签: ef-code-first

EF4 Code-First导致InvalidOperationException

我每次构建时都试图运行我的项目时遇到问题.似乎初始化程序运行,但是当涉及第一个查询时 - 它会死于以下内容InvalidOperationException.

This operation requires a connection to the 'master' database. Unable to create a
connection to the 'master' database because the original database connection has
been opened and credentials have been removed from the connection string. Supply
an unopened connection.
Run Code Online (Sandbox Code Playgroud)

作为参考,我使用的是直接导入NuGet的EF Code First CTP4.连接到SQL Server 2008 R2

我想要发生的是,如果有任何模型修改,则重新创建数据库,并为查找表提供一些值.这些东西似乎都支持*开箱即用.

我的设置是这样的:

Global.asax中

 protected void Application_Start()
 {
    Database.SetInitializer<CoreDB>(new CoreDBInitialiser());
    // et al...
 }
Run Code Online (Sandbox Code Playgroud)

CoreDB.cs

public class CoreDB : DbContext
{
    public DbSet<User> Users { get; set; }
    public DbSet<Login> …
Run Code Online (Sandbox Code Playgroud)

c# database entity-framework code-first ef-code-first

28
推荐指数
3
解决办法
2万
查看次数

实体类型<classname>不是当前上下文的模型的一部分

DB有一张桌子PackagingInfo.我有一Package节课,还有一节课ShopEntities : DbContext.

// Entity (ex. Package.cs)
[Table("PackagingInfo")]
public class Package
{
    public decimal PackageID { get; set; }
    public decimal Title { get; set; }
    public decimal Cost { get; set; }
    public bool isFree { get; set; }

}

// Entity Context (ex. ShopEntities.cs)
public class ShopEntities : DbContext
{               
    public DbSet<Package> Packages { get; set; }
}


// Controller Action (ex. HomeController.cs)
public ActionResult Index()
{
    ShopEntities _db = new ShopEntities(); …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first

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

如何确保首先在EF代码中的表关系上启用级联删除?

我想使用代码优先在表上启用CASCADE DELETE.从头开始重新创建模型时,即使关系是自动设置,也不会设置CASCADE DELETE.奇怪的是,它可以为一些具有多对多关系的表启用此功能,您可能认为它可能存在问题.

设置: 表A < - 表B.

表B的FK指向表A的PK.

为什么这不起作用?

entity-framework cascading-deletes ef-code-first entity-framework-4.1

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

实体框架代码优先 - 为什么我不能这样更新复杂属性?

我正在使用Entity Framework 4.1(代码优先)开展一个小型示例项目.我的课程看起来像这样:

public class Context : DbContext
{
    public IDbSet<Person> People { get; set; }
    public IDbSet<EmployeeType> EmployeeTypes { get; set; }
}

public class Person
{
    [Key]
    public int Key { get; set; }
    public string FirstName { get; set; }
    public string LastName { get; set; }

    virtual public EmployeeType EmployeeType { get; set; }
}

public class EmployeeType
{
    [Key]
    public int Key { get; set; }
    public string Text { get; set; }

    virtual public …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first entity-framework-4.1

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

实体框架中的自引用/父子关系

我阅读了很多程序员的帖子,这些帖子遇​​到了Unable,以确定依赖操作的有效排序.在实体框架中使用自引用关系时,由于外键约束,模型要求或存储生成的值 -例外,可能存在依赖关系.

我正在努力建立一个亲子关系:

public class Category {
    public int CategoryId { get; set; }
    public string Name { get; set; }
    public int ParentId { get; set; }
    public Category Parent { get; set; }
    public List<Category> Children { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

这是我使用的配置(Fluent API):

Property(c => c.ParentId).IsOptional();
HasMany(c => c.Children).WithOptional(c => c.Parent).HasForeignKey(c => c.ParentId);
//HasOptional(c => c.Parent).WithMany(c => c.Children).HasForeignKey(c => c.ParentId);
Run Code Online (Sandbox Code Playgroud)

当我尝试保存这样的新类别时,HasMany()和HasOptional()配置都会导致"无法确定依赖操作的有效排序..."异常:

context.Categories.Add(new Category { Name = "test" });
Run Code Online (Sandbox Code Playgroud)

我不明白为什么EF不插入带有null parentId的Category.数据库允许ParentId外键为null.

你能告诉我怎么做吗?

entity-framework parent-child self-reference ef-code-first entity-framework-4.1

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

最有效地处理创建,更新,删除实体框架代码优先

注意:我使用的是Entity Framework第5版

在我的通用库,我有Add,EditDelete下面的方法:

public class EntityRepository<T> : IEntityRepository<T>
    where T : class, IEntity, new() {

    readonly DbContext _entitiesContext;

    public EntityRepository(DbContext entitiesContext) {

        if (entitiesContext == null) {

            throw new ArgumentNullException("entitiesContext");
        }

        _entitiesContext = entitiesContext;
    }

    //...

    public virtual void Add(T entity) {

        DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
        if (dbEntityEntry.State != EntityState.Detached) {

            dbEntityEntry.State = EntityState.Added;
        }
        else {

            _entitiesContext.Set<T>().Add(entity);
        }
    }

    public virtual void Edit(T entity) {

        DbEntityEntry dbEntityEntry = _entitiesContext.Entry<T>(entity);
        if (dbEntityEntry.State == …
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first dbcontext entity-framework-5

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

如何在EF-Code-First中指定主键名称

我正在使用Entity Framework Codefirst来创建我的数据库.当我通过ODBC连接到它时,具有模式名称dbo.pk_Jobs的默认主键似乎扰乱了访问2007.如果我手动编辑名称并删除模式名称并将此主键重命名为pk_jobs,则Access现在可以读取该表.

是否可以使用Fluent Api,数据属性或任何其他方法指定主键名称不包括架构的名称.

public class ReportsContext : DbContext
{
    public DbSet<Job> Jobs { get; set; }
    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        modelBuilder.Entity<Job>().ToTable("Jobs");
        modelBuilder.Entity<Job>().HasKey(j => j.uuid);

        base.OnModelCreating(modelBuilder);
    }
}
public class Job
{
    public Guid uuid{ get; set; }
    public int active{ get; set; }
}
Run Code Online (Sandbox Code Playgroud)

.net c# sql-server entity-framework ef-code-first

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

实体框架代码首先使用一列作为主键,另一列作为自动增量列

我有一个名为Sale的课程

public class Sale
{
    public int Id { get; set; }
    public string TrNo { get; set; }
    public DateTime Date { get; set; }
    public int CustomerID { get; set; }

    public ObservableCollection<SaleDetail> SaleDetails { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

在数据库中,我希望IdAuto Increment列作为列,而TrNoPrimary Key列作为列.

请先告诉我如何使用EF5代码执行此操作.

谢谢.

c# entity-framework ef-code-first

28
推荐指数
4
解决办法
6万
查看次数

在代码优先实体框架和SQL Server中使用DateTime属性

我有一个示例类book:

public class Book
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }
    public DateTime DateAdded { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

当我尝试bookBookDb上下文中添加新内容时...

using (BookDb db = new BookDb())
{
    Book book = new Book {
        Name = "Some name",
        DateAdded = DateTime.Now
    };

    db.Books.Add(book);
    db.SaveChanges();
}
Run Code Online (Sandbox Code Playgroud)

...抛出错误:

System.Data.SqlClient.SqlException:将datetime2数据类型转换为日期时间数据类型会导致超出范围的值.该语句已终止.


我发现原因是datetime.NET和SQL Server之间不兼容的类型.有一种方法可以告诉EF在传统的实体框架中使用SQL Server的格式,但我如何在Code-First Entity Framework中执行此操作?

我在.NET 4(MVC 3 Web应用程序)和SQL Server 2008 Express上使用EF4.

datetime entity-framework-4 ef-code-first

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

实体框架6代码优先功能映射

我想将Entity Framework 6集成到我们的系统中,但是有问题.

  1. 我想使用Code First.出于其他原因,我不想使用Database First*.edmx文件.
  2. 我使用属性映射[表],[列],这工作正常
  3. 数据库有许多用户定义的函数,我需要在Linq To Entities查询中使用它们.

问题是:

我不能通过像[Table],[Column]这样的属性来映射函数.只有1个属性可用[DbFunction],它需要*.edmx文件.

我可以在*.edmx文件中映射函数,但这意味着我不能使用实体的属性映射:[Table],[Column].必须在*.edmx或属性中填充映射.

我尝试通过以下代码创建DbModel并添加函数:

public static class Functions
{
    [DbFunction("CodeFirstNamespace", "TestEntity")]
    public static string TestEntity()
    {
        throw new NotSupportedException();
    }
}


public class MyContext : DbContext, IDataAccess
{
    protected MyContext (string connectionString)
        : base(connectionString, CreateModel())
    {
    }

    private static DbCompiledModel CreateModel()
    {
        var dbModelBuilder = new DbModelBuilder(DbModelBuilderVersion.Latest);
        dbModelBuilder.Entity<Warehouse>();
        var dbModel = dbModelBuilder.Build(new DbProviderInfo("System.Data.SqlClient", "2008"));

        var edmType = PrimitiveType.GetEdmPrimitiveType(PrimitiveTypeKind.String);
        var payload =
            new EdmFunctionPayload
            {
                Schema = "dbo",
                ParameterTypeSemantics = ParameterTypeSemantics.AllowImplicitConversion, …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework sql-function ef-code-first entity-framework-6

27
推荐指数
2
解决办法
3万
查看次数