MVC3、如何應用EntityFramework Code First模式 到MySql 資料庫

來源:互聯網
上載者:User

新的一年,新的開始。

今天總結的主題是在MySql中應用EntityFramework 的Code First模式。

開發環境:Win8 + MySql5.5 +VS 2012.

第一步是在資料庫中建立一個表,具體欄位如。

在表中添加若干資料:

資料建好之後,下面就是在項目中引用EntityFramework了。

二,在項目中建立一個實體類Product

    public class Product
    {
        public int ProductID { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
        public decimal Price { get; set; }
        public string Category { get; set; }
    }

注意,成員名要與資料庫中的名相同。

然後建立一個介面 IProductRepository

public  interface IProductRepository
    {
        IQueryable<Product> Products { get; }
    }

 

之後,是實現介面的類

 public class EFProductRepostitory:IProductRepository    

{        

private EFDbContext context = new EFDbContext();

public IQueryable<Entities.Product> Products     

   {            

get { return context.Products; }

   }    

}

 

實現與資料庫上下文關聯

public class EFDbContext:DbContext
    {
        public DbSet<Product> Products { get; set; }
        public DbSet<Friend> Friends { get; set; }
    }

 

然後在Controller中實現調用

public class ProductController : Controller    {        private int pageSize = 4;        private IProductRepository repository;        public ProductController(IProductRepository productRepository)        {            repository = productRepository;        }        public ViewResult List(int page=1)        {            return View(repository.Products                .OrderBy(p=>p.ProductID)                .Skip((page-1)*pageSize)                .Take(pageSize));        }    }

在Ninject產生Controller的類中綁定。

 public class NinjectControllerFactory:DefaultControllerFactory    {        private IKernel ninjectKernel;        public NinjectControllerFactory()        {            ninjectKernel = new StandardKernel();            AddBindings();        }        protected override IController GetControllerInstance(System.Web.Routing.RequestContext requestContext, Type controllerType)        {            return controllerType == null ? null : (IController)ninjectKernel.Get(controllerType);        }        public void AddBindings()        {            //Mock<IProductRepository> mock = new Mock<IProductRepository>();            //mock.Setup(m => m.Products).Returns(new List<Product> {            //    new Product{ Name=" football", Price=25},            //    new Product{ Name="basketball" , Price=30},            //    new Product{ Name="PingPang" , Price=40}            //}.AsQueryable());            //ninjectKernel.Bind<IProductRepository>().ToConstant(mock.Object);                        ninjectKernel.Bind<IProductRepository>().To<EFProductRepostitory>();            ninjectKernel.Bind<IFriend>().To<EFFriend>();        }

最後需要注意的一點是,設定檔中寫資料庫連接的地方要與DbContext的類名保持一致。

 <connectionStrings>    <!--<add name="DefaultConnection" providerName="System.Data.SqlClient" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-SportStore.UI-20121214161900;Integrated Security=SSPI;AttachDBFilename=|DataDirectory|\aspnet-SportStore.UI-20121214161900.mdf" />-->    <add name="EFDbContext" connectionString="Database=sportstore;Data Source=localhost;User Id=root;Password=root" providerName="MySql.Data.MySqlClient"/>  </connectionStrings>

 

 

 

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.