使用时出错

use*_*379 16 .net c# database entity-framework-5

我有一个错误

using语句中使用的类型必须可以隐式转换为'System.IDisposable'

在线

using (var context = new EntityContainer())
Run Code Online (Sandbox Code Playgroud)

这是我的代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data.SqlClient;
using System.Globalization;
using System.Data;
using System.Data.Entity;
using school.usi.susibar.model;

namespace school.usi.susibar.test
{
    class Program
    {

        public static void Main(string []args)
         {
            using (var context = new EntityContainer())
            {

                addOrderStatusType(context);

                Console.ReadLine();
            }
        } 


        private static void addOrderStatusType(EntityContainer context)
        {
            try
            {
                OrderStatusType type = new OrderStatusType
                {
                    Name = "Vyrizeno", 
                    CancelPermission = false, 
                    ChangePermission = false
                };
                context.OrderStatusTypes.Add(type);
                context.SaveChanges();
                Console.WriteLine("Pridano");
            }
            catch (Exception ex) {
                Console.WriteLine(ex.InnerException);
            }
        }
         }

            }
Run Code Online (Sandbox Code Playgroud)

EntityContainer()看起来像这样......

//------------------------------------------------------------------------------
// <auto-generated>
//    This code was generated from a template.
//
//    Manual changes to this file may cause unexpected behavior in your application.
//    Manual changes to this file will be overwritten if the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

namespace school.usi.susibar.model
{
    using System;
    using System.Data.Entity;
    using System.Data.Entity.Infrastructure;

    public partial class EntityContainer : DbContext
    {
        public EntityContainer()
            : base("name=EntityContainer")
        {
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            throw new UnintentionalCodeFirstException();
        }

        public DbSet<Role> Roles { get; set; }
        public DbSet<Category> Categories { get; set; }
        public DbSet<Table> Tables { get; set; }
        public DbSet<OrderStatusType> OrderStatusTypes { get; set; }
        public DbSet<Person> Persones { get; set; }
        public DbSet<Item> Items { get; set; }
        public DbSet<Order> Orders { get; set; }
        public DbSet<Stock> Stocks { get; set; }
        public DbSet<ItemOrderList> ItemOrderLists { get; set; }
        public DbSet<ItemOrderStatus> ItemOrderStatuses { get; set; }
        public DbSet<PaymentOrderStatus> PaymentOrderStatuses { get; set; }
        public DbSet<Prepaid> Prepaids { get; set; }
    }
}
Run Code Online (Sandbox Code Playgroud)

编辑:DbContext实现IDisposable,我不能编辑EntityContainer()类,因为它是从模板生成的.

有什么想法有什么不对?

Don*_*kby 59

这个答案:

上下文仍然实现IDisposable,但是如果你收到错误...抱怨没有实现IDisposable,那么你的问题很可能是你的模型是在一个引用EF5的单独程序集中定义的,而你没有添加EF5引用你的项目.

  • 谢谢!除了对EntityFramework的引用之外,我还需要添加对System.Data.Entity的引用,然后我的"使用"错误消失了.:) (2认同)

Ram*_*ine 7

答案是将EntityFramework程序集添加到引用中


Rui*_*mba 5

如果要EntityContainerusing语句中使用,则必须实现IDisposable

试试这个:

public partial class EntityContainer : DbContext, IDisposable
{
    public EntityContainer()
        : base("name=EntityContainer")
    {
    }

    protected override void OnModelCreating(DbModelBuilder modelBuilder)
    {
        throw new UnintentionalCodeFirstException();
    }

    public DbSet<Role> Roles { get; set; }
    public DbSet<Category> Categories { get; set; }
    public DbSet<Table> Tables { get; set; }
    public DbSet<OrderStatusType> OrderStatusTypes { get; set; }
    public DbSet<Person> Persones { get; set; }
    public DbSet<Item> Items { get; set; }
    public DbSet<Order> Orders { get; set; }
    public DbSet<Stock> Stocks { get; set; }
    public DbSet<ItemOrderList> ItemOrderLists { get; set; }
    public DbSet<ItemOrderStatus> ItemOrderStatuses { get; set; }
    public DbSet<PaymentOrderStatus> PaymentOrderStatuses { get; set; }
    public DbSet<Prepaid> Prepaids { get; set; }

    public void Dispose()
    {
        base.Dispose();
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 如果在基类上定义了IDisposable,则不应该将其添加到子类中.这里的问题更可能与引用不兼容的EF版本有关.请参阅http://stackoverflow.com/questions/12508031/entity-framework-5-model-first-where-is-idisposable-gone (7认同)
  • 是的但IDisposable是由DbContext实现的.那么为什么它不起作用? (3认同)