2013-10-05 5 views
0

Я создаю приложение на основе рабочего стола на visual studio 2012. Entity Framework не работает как SaveChanges(), он не дает исключения, кажется, что данные были введены, но после обновления база данных не добавляет лишней строки.Entity Framework не работает в архитектуре N-уровня

Для демонстрации я сделал 2-уровневую архитектуру.

  • Просмотр
  • Data Access Layer

На мой взгляд ......

public partial class Form1 : Form 
    { 
     public Form1() 
     { 
      InitializeComponent(); 
     } 

     private void button1_Click(object sender, EventArgs e) 
     { 
      MyDAL dal = new MyDAL(); 
      if (dal.Add(StudentName.Text, Contact.Text)) 
      { 
       MessageBox.Show("Addition Successfull"); 
      } 
      else 
      { 
       MessageBox.Show("Addition Failed"); 
      } 
     } 
    } 

Мой Доступ к данным слой ........

public class MyDAL 
    { 
     public bool Add(string name, string contact) 
     { 
      using (var db = new Database1Entities()) 
      { 
       Student s = new Student(); 
       s.StudentName = name; 
       s.ContactNo = contact; 

       try 
       { 
        db.Students.Add(s); 
        db.SaveChanges(); 
        return true; 
       } 
       catch (Exception ex) 
       { 
        return false; 
       } 
      } 
     } 
    } 

И моя база данных Script is .....

CREATE TABLE [dbo].[Student] (
    [Student_Id] INT   IDENTITY (1, 1) NOT NULL, 
    [StudentName] VARCHAR (50) NULL, 
    [ContactNo] VARCHAR (50) NULL, 
    PRIMARY KEY CLUSTERED ([Student_Id] ASC) 
); 

Мой App.Config в View

<?xml version="1.0" encoding="utf-8" ?> 
<configuration> 
    <startup> 
    <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /> 
    </startup> 
    <connectionStrings> 
    <add name="Database1Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Database1.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
</configuration> 

Мои App.Config в DAL есть ....

<?xml version="1.0" encoding="utf-8"?> 
<configuration> 
    <configSections> 
    <!-- For more information on Entity Framework configuration, visit http://go.microsoft.com/fwlink/?LinkID=237468 --> 
    <section name="entityFramework" type="System.Data.Entity.Internal.ConfigFile.EntityFrameworkSection, EntityFramework, Version=5.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" /> 
    </configSections> 
    <connectionStrings> 
    <add name="Database1Entities" connectionString="metadata=res://*/Model1.csdl|res://*/Model1.ssdl|res://*/Model1.msl;provider=System.Data.SqlClient;provider connection string=&quot;data source=(LocalDB)\v11.0;attachdbfilename=|DataDirectory|\Database1.mdf;integrated security=True;connect timeout=30;MultipleActiveResultSets=True;App=EntityFramework&quot;" providerName="System.Data.EntityClient" /> 
    </connectionStrings> 
    <entityFramework> 
    <defaultConnectionFactory type="System.Data.Entity.Infrastructure.LocalDbConnectionFactory, EntityFramework"> 
     <parameters> 
     <parameter value="v11.0" /> 
     </parameters> 
    </defaultConnectionFactory> 
    </entityFramework> 
</configuration> 

ответ

1

Он работает как задумано. Это простое непонимание опции |DataDirectory|.

При компиляции вашего решения база данных копируется в \Debug\|DataDirectory| и там файл изменяется.

Скорее всего, вы смотрите на файл в решении (visual studio), который находится в , а не, будучи изменен исполняемым файлом в каталоге Debug.

+0

Так как я могу получить измененную базу данных, так как «Отладочная папка» присутствует как в представлении, так и в DAL ... – ButtGenius

+0

Спасибо, много «Эрик» ... Ты сделал мой день:) ....... .I изменил | DataDirectory | с абсолютным путём базы данных, и он работал отлично, как ожидалось – ButtGenius

Смежные вопросы