实体框架:使用代码第一种方法帮助创建数据库

时间:2015-08-02 07:27:34

标签: c# database entity

确定2个问题: 1.我是数据库的新手,我想学习代码创建数据库的第一种方法。我已经使用了Model-first方法几次。任何人都可以帮助我使用代码优先方法编写此数据库(如果可能,我还想添加一个Employee表)? 这是DB Diagram的链接:

http://databaseanswers.org/data_models/customers_and_orders/images/customers_and_orders_ref_data_model.gif

  1. 另外,我如何插入到一起说吧客户表/客户地址,当然使用实体框架?
  2. 提前感谢任何愿意提供帮助的人。

2 个答案:

答案 0 :(得分:1)

你可以这样做:

请注意,此解决方案已作为控制台应用程序完成。

请首先添加以下类作为代码:

        public class Customer
            {
                [Key]
                public int CustomerId { get; set; }
                public string FirstName { get; set; }
                public string MiddleName { get; set; }
                public string LastName { get; set; }
                public string Phone { get; set; }
                public string Email { get; set; }
                public string CustomerOtherDetails { get; set; }
            }

            public class CustomerAddress
            {
                [ForeignKey("Customer")]
                public int CustomerId { get; set; }
                [ForeignKey("AddressType")]
                public int AddressTypeId { get; set; }
                [ForeignKey("Address")]
                public int AddressId { get; set; }
                [Key]
                public DateTime DateFrom { get; set; }
                public DateTime DateTo { get; set; }
                public virtual Customer Customer { get; set; }
                public virtual AddressType AddressType { get; set; }
                public virtual Address Address { get; set; }
            }

            public class AddressType
            {
                [Key]
                public int AddressTypeId { get; set; }
                public string AddressTypeDescriptiom { get; set; }
            }

            public class Address
            {
                [Key]
                public int AddressId { get; set; }
                public string Line1 { get; set; }
                public string Line2 { get; set; }
                public string Line3 { get; set; }
                public string City { get; set; }

            }

当您执行Code First方法时,您需要从您创建的类中创建模型,并且可以按如下方式完成:

Context类应如下所示:

    public class CustomerContext : DbContext
    {
        public CustomerContext()
            : base("DBConnectionString")
        {
            //If model change, It will re-create new database.
            Database.SetInitializer(new DropCreateDatabaseIfModelChanges<CustomerContext>());
        }

        protected override void OnModelCreating(DbModelBuilder modelBuilder)
        {
            //Set primary key to Customer table
            modelBuilder.Entity<Customer>().HasKey(m => m.CustomerId);


            //set primary key to Address table
            modelBuilder.Entity<CustomerAddress>().HasKey(m => m.DateFrom);

            modelBuilder.Entity<AddressType>().HasKey(m => m.AddressTypeId);
            modelBuilder.Entity<Address>().HasKey(m => m.AddressId);

            //Set foreign key property
            modelBuilder.Entity<CustomerAddress>().HasRequired(t => t.Customer)
                .WithMany().HasForeignKey(t => t.CustomerId);

            modelBuilder.Entity<CustomerAddress>().HasRequired(t => t.AddressType)
                .WithMany().HasForeignKey(t => t.AddressTypeId);

            modelBuilder.Entity<CustomerAddress>()
                .HasRequired(t => t.Address)
                .WithMany()
                .HasForeignKey(t => t.AddressId);
        }

数据库创建和客户插入地址应如下所示:

    static void Main(string[] args)
            {
                using (var ctx = new CustomerContext())
                {
                    //ctx.Database.Create(); // This command can be used to create the database using the code first class
                    ctx.CustomerAddresses.Add(new CustomerAddress
                    {
                        AddressType = new AddressType
                        {
                            AddressTypeId = 1,
                            AddressTypeDescriptiom = "Test"
                        },
                        Customer = new Customer
                        {
                            CustomerId = 1,
                            FirstName = "Customer 1"
                        },
                        Address = new Address
                        {
                            Line1 = "Line 1",
                            City = "USA"
                        },
                        DateFrom = DateTime.Now,
                        DateTo = DateTime.Now
                    });

                    ctx.SaveChanges();
                }
            }

连接字符串应如下所示:

    <connectionStrings>
        <add name="DBConnectionString"
            connectionString="Data Source=(local);Initial Catalog=CustomerDB;Integrated Security=true"
            providerName="System.Data.SqlClient"/>
      </connectionStrings>

请注意以下注释,上述代码需要以下参考。

using System;
using System.ComponentModel.DataAnnotations;
using System.ComponentModel.DataAnnotations.Schema;
using System.Data.Entity;

我尝试了这个,它按预期工作。请告诉我你是否需要一个示例项目。

希望这会对你有所帮助。

<强>编辑:

要首先在代码中配置自引用,请按以下步骤操作:

public class Product
    {
        [Key]
        public int ProductId { get; set; }

        public int? ParentProductId { get; set; }

        public virtual Product ParentProduct { get; set; }
    }

OnModelCreating方法中添加以下代码行:

modelBuilder.Entity<Product>().HasKey(m => m.ProductId);
modelBuilder.Entity<Product>().
                HasOptional(e => e.ParentProduct).
                WithMany().
                HasForeignKey(m => m.ParentProductId);

答案 1 :(得分:0)

  1. 对于员工表,您可以创建一个类(Employee.cs):

    公共班员工 {

    public string FName {get; set;} public string LName {get; set;} public string Position {get; set;} public string Email {get; set;} [显示(名称=“全名”)] 公共字符串FullName {     得到     {         return LName +“,”+ FName;     } }

  2. }

    1. 对于插入,您可以执行以下操作:

       var users = new List<User>
          {
              new User{FName ="Chris", LName ="Fajardo",Position=@"Dev",Email="test.test@test.ae"}
          };
          users.ForEach(s => context.User.Add(s));
          context.SaveChanges();