【问题标题】:Entity Framework is not working in N-Tier Architecture实体框架在 N 层架构中不起作用
【发布时间】:2013-10-12 14:23:14
【问题描述】:

我正在 Visual Studio 2012 上构建基于桌面的应用程序。实体框架无法正常工作,因为 SaveChanges() 发生它没有给出异常,似乎已输入数据,但刷新数据库后未在其中添加额外行.

为了演示,我制作了 2 层架构。

  • 查看
  • 数据访问层

我的观点是……

    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;
                }
            }
        }
    }

我的数据库脚本是.....

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 在视图中

<?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>

我在 DAL 中的 App.Config 是....

<?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>

【问题讨论】:

    标签: c# entity-framework


    【解决方案1】:

    它按预期工作。这是对|DataDirectory| 选项的简单误解。

    当您编译您的解决方案时,数据库将被复制到 \Debug\|DataDirectory| 并在那里修改文件。

    您很可能正在查看解决方案 (visual studio) 中的文件,该文件没有Debug 目录中的可执行文件修改。

    【讨论】:

    • 那么我怎样才能得到修改后的数据库,因为 Debug folder 存在于 View 以及 DAL 中......
    • 非常感谢Erik...你让我开心:)........我更改了|DataDirectory|使用数据库的绝对路径,它按预期完美运行
    猜你喜欢
    • 2012-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2011-10-09
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    相关资源
    最近更新 更多