我开始研究我的第一个EF项目。
我想在我的解决方案中将EF作为单独的类库....
这看起来如何: http://shrani.si/f/3/Xh/32C70yts/ef5.jpg
我已经开始使用现有数据库并将其导入新的类库(如DbModel) 我已经将所有引用导入到MVC4项目中,因此我能够使用现有的实体clases(对于DbModel.tt,类似于User.cs ......)
只要我使用那些类(db表)一切正常......我可以创建新的Controller ...编辑数据,写入Db ......
但是当我尝试编写自己的Model类&而不是尝试创建新的控制器(带有R / W的MVC控制器......使用EF) 我收到错误 - 不支持的上下文类型
当然可以创建空的Controler。
我没有在DB或Model上找到太多东西(只有真正的基础帮助),大多数信息都在Code first aproach上。
我的Db最后应该有大约100个表...如果那意味着EF中的任何东西。
答案 0 :(得分:1)
您的问题很难理解,但我认为您正在寻找将Mvc4与实体框架数据库一起使用的方向。
我不太明白你的错误,但你的句子“当我试着写我自己的模特课......”让我想到以下几点:
<database name>Entities
。我通常会将其更改为<database name>_entities
,因为我的数据库名称通常会被强调。无论您将edmx文件放在何处,都应在与此目录/命名空间相同的位置找到此对象。你提到了一个类库。我经常这样做,我在一个公共库中共享模型逻辑:
@model
声明会说该模型为DbModel.DB.my_entity
。以下是使用Entity Framework和MVC4
的小指令首先,您需要安装MySQL数据和实体包。我通常通过nuget做这些只是为了让事情变得更容易。听起来你已经这样做了,但我把它放在这里只是为了通过。如果您使用单独的库。在该库上使用NuGet。在构建库和MVC项目时,应将相应的dll复制到bin目录中。
接下来,您需要导入数据库。我发现最好的方法是预测你将会有多少课程。你说了大约100个表,所以我建议在你的模型文件夹中创建一个名为DB的新文件夹,这样它就不会与其他所有内容混淆。您需要右键单击此新文件夹并添加新项目。选择ADO.Net数据模型。它应该创建一个edmx文件。从连接事物中选择MySQL连接器(按钮显示“更改...”或类似默认MSSQL连接器旁边的内容)。输入您的数据库信息,然后按照屏幕上的说明导入您的模型。
您现在应该有一个包含一个文件的DB文件夹,但是在使用objectbrowser检查命名空间时,您应该看到所有的表类。
在此之后,你有几个选择:
您的控制器实际上不应该关心它使用的是什么型号。下面是典型控制器使用您在模型中的DB文件夹中创建的上下文的简短示例:
public class HomeController : MvcController
{
private Model.DB.my_database_context context = new Model.DB.my_database_context();
public ActionResult ShowSomething()
{
return this.View(context.users.First()); //assuming you have a table called user
}
}
这非常不可靠(如果表中没有记录,则使用First()抛出异常),但如果在Views / Home文件夹中有一个名为ShowSomething.cshtml的视图,它应如下所示: / p>
@model Model.DB.a_table
@Model.user_name
它只会显示用户名
现在,模特使用Web API控制器感兴趣的地方:
public class ValuesController : ApiController
{
private Model.DB.my_database_context context = new Model.DB.my_database_context();
public IEnumerable Get()
{
return context.values; //assuming you have a table called values
}
public value Get(string id)
{
return context.values.Where(v => v.id == id).FirstOrDefault();
}
}
这些将获取您的上下文并直接输出一个序列化为XML,JSON或其他内容的实体,具体取决于请求中的某些标头(Accept-Type或类似的东西)。