我有一个包含5个表的数据库.一开始,我已经添加了这些表,但后来由于某些关系编译错误而决定删除一些.
现在,当我想要添加它们时,我正在打开edmx文件 - >从数据库更新模型...我没有在添加选项卡下看到这些表,而只是在"刷新"选项卡下.
我该如何添加它们?
我在MVC3项目A和B中有两个实体数据模型.
我最近添加了新的实体数据模型B来处理一些新功能,问题是现在现有代码已经停止工作,并且在尝试访问实体模型A中的代码时出现以下错误.
错误消息是:
找不到概念模型类型'project.models.Bclass'
我不明白为什么这个新功能影响了当前代码,因为实体模型A没有任何改变.功能B在一个单独的类中,不会干扰模型A.
当从项目中删除新代码并且排除实体模型B时,代码将按预期工作.
以下是错误中的一些堆栈跟踪:
Exception : Could not find the conceptual model type for 'Project1.Models.CrossSession'.
Application Class - method : System.Data.Metadata.Edm.MetadataWorkspace -- GetEdmSpaceType
User : temp.user
Url : http://localhost/project1/auth/message
Stacktrace : at System.Data.Metadata.Edm.MetadataWorkspace.GetEdmSpaceType(StructuralType objectSpaceType)
at System.Data.Entity.Internal.InternalContext.UpdateEntitySetMappings()
at System.Data.Entity.Internal.InternalContext.TryUpdateEntitySetMappingsForType(Type entityType)
at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType)
at System.Data.Entity.Internal.Linq.InternalSet`1.Initialize()
at System.Data.Entity.Internal.Linq.InternalSet`1.get_InternalContext()
Run Code Online (Sandbox Code Playgroud) 我在表结构中做了一些更改,尤其是SQL Server数据库中表之间的关系.现在我想基于这个新的数据库结构更新我的实体模型.
右键单击edmx文件,我找到"从数据库更新模型"选项.但是当我这样做时,我得到了50%的更新:新的列出现在实体类中,但我对模型中仍然存在的许多导航属性感到困惑,尽管相应的外键关系不再存在数据库.(编辑:尽管数据库中的列已被删除,但模型类中的成员也不会被删除.)
难道我做错了什么?或者是否有其他选项来更新模型,包括删除导航属性?或者我是否必须在模型文件中手动删除这些导航属性?
我正在使用实体框架版本1(VS 2008 SP1).
提前感谢您的帮助!
在创建实体模型时,我收到以下错误.
Added the connection string to Web.Config.
Successfully registered the assembly 'System.Data.Entity, Version=3.5.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' in Web.Config.
ERROR: Unable to generate model because of the following exception: 'Value does not fall within the expected range.'.
Loading metadata from database took 00:00:02.1203632.
Generating model took 00:00:00.8390920.
Writing out the EDMX file took 00:00:00.
Run Code Online (Sandbox Code Playgroud)
所有表都被创建但BC_States表没有被创建.我无法理解为什么.
我有这个代码:
public class Item {
@Column(name = "serialNo", length = 12)
public String getSerialNo() {
return this.serialNo;
}
public void setSerialNo(String serialNo) {
this.serialNo = serialNo;
}
}
Run Code Online (Sandbox Code Playgroud)
但是,数据库模式将列定义为长度为13.当通过以下方式检索项时:
List<Item> items = getEntityManager().createNamedQuery(SQL).getResultList();
Run Code Online (Sandbox Code Playgroud)
具有数据serialNo等于字符13(因为分贝表模式允许13)仍然被显示为13,不会被截断.@Column length当时有什么用?
在项目中工作时,我看到了一个奇怪的行为,我无法理解加载导航属性。
这是一个重现这个“问题”的小例子。

我想加载一年,但不包括公司的数据(导航属性)。
我的代码:
public static Year GetYear(int id)
{
using (var context = new testModelContainer())
{
var result = context.YearSet.FirstOrDefault(c => c.Id == id);
//Company test = context.CompanySet.Where(c => c.Id == id).FirstOrDefault();
return result;
}
}
Run Code Online (Sandbox Code Playgroud)
这将返回我想要的年份,导航属性中没有数据,但是如果我取消注释该行并只执行该行,可能是因为我想知道公司名称或其他什么,它会自动将公司数据包含到公司中年度最佳导航属性。
知道如何防止这种行为吗?出于安全原因,我想避免发送“父母”的数据。
我正在使用 EF 6、.NET 4.5。
我在实体模型中添加了新属性,因为新列已添加到数据库表中。但该列可能存在于其他客户端数据库中。那么,如何处理呢?我已经尝试过modelBuilder.Entity<Customer>().Ignore(customer => customer.FullName);
,但它并没有忽略实体中的属性。因为我们有实体映射类,所以它不会忽略它。请问解决办法?
我正在尝试使用MySQL的官方Connector/Net 6.4.3 ADO.NET驱动程序从我的MySQL数据库生成我的ADO.NET实体模型.但是,在我输入我的DB-info,然后单击下一步(测试连接报告成功连接)后,我从Visual Studio收到以下错误消息:
连接到数据库时发生错误.数据库可能不可用.发生了'System.Data.ProviderIncompatibleException'类型的异常.错误消息是:'提供程序未返回ProviderManifestToken字符串'.
捕获的内部异常是'System.FormatException'类型,并显示以下错误消息:'输入字符串格式不正确.'.
有人知道怎么修这个东西吗?
mysql ado.net connection-string visual-studio-2010 entity-model
我创建了一个带有SQL Server数据库的简单项目,该数据库包含许多表和大量索引,但没有什么真正复杂的.没有触发器,没有存储过程,没有额外的"数据库魔术".代码是用C#编写的,使用实体模型和动态数据站点来快速设置基础知识,因此一些键入的猴子可以投入工作并执行一些基本数据输入,同时我将修改项目以使其更加成熟.
在SQL Server 2005上测试过,一切正常.所以我通过Visual Studio进行了设置,并将其发送给键入Monkeys及其管理员.他们所要做的就是:1)创建一个新的数据库.2)执行数据库的Create脚本.3)安装我给他们的设置.4)修改连接字符串,它恰好放在特殊的配置文件中以方便使用.5)使用Web界面并在出现问题时通知我.
出了点问题.完整的错误:第1行:''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
我的代码中没有使用'row_number'.我只是使用Linq进行查询.此外,由于实体模型,我甚至不必担心做任何SQL的东西.(尽管我很擅长.)
我的第一个猜测是他们使用了错误的连接字符串.他们可能正在SQL Server上安装这个应用程序(它应该仍然可以工作),但它们并没有完全改变连接字符串,现在我的项目认为它正在使用SQL Server 2005.(或者其他什么.)我是对的还是由于某些原因引起的其他讨厌的bug?
完整错误:
[SqlException(0x80131904):第1行:'('.''row_number'附近的语法不正确不是可识别的函数名.关键字'AS'附近的语法不正确.]
System.Data.SqlClient.SqlConnection.OnError(SqlException exception,Boolean breakConnection)+1950890 System.Data.SqlClient.SqlInternalConnection.OnError(SqlException exception,Boolean breakConnection)+4846875 System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning(TdsParserStateObject stateObj)+194
System.Data.SqlClient.TdsParser.Run(RunBehavior runBehavior, SqlCommand cmdHandler,SqlDataReader dataStream,BulkCopySimpleResultSet bulkCopyHandler,TdsParserStateObject stateObj)+2392
System.Data.SqlClient.SqlDataReader.ConsumeMetaData()+33 System.Data.SqlClient.SqlDataReader.get_MetaData()+83 System.Data.SqlClient.SqlCommand.FinishExecuteReader( SqlDataReader ds,RunBehavior runBehavior,String resetOptionsString)+297
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,Boolean async)+954 System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior,Boolean returnStream,String method,DbAsyncResult result)+162
System.Data.SqlClient.SqlCommand.RunExecuteReader(CommandBehavior cmdBehavior,RunBehavior runBehavior, Boolean returnStream,String method)+32 System.Data.SqlClient.SqlCommand.ExecuteReader(CommandBehavior behavior,String method)+141
System.Data.SqlClient.SqlCommand.ExecuteDbDataReader(CommandBehavior behavior)+12
System.Data.Common.DbCommand.ExecuteReader (CommandBehavior行为)+10
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)+387[EntityCommandExecutionException:执行命令定义时发生错误.有关详细信息,请参阅内部异常.]
System.Data.EntityClient.EntityCommandDefinition.ExecuteStoreCommands(EntityCommand entityCommand,CommandBehavior behavior)+423
System.Data.Objects.Internal.ObjectQueryExecutionPlan.Execute(ObjectContext context,ObjectParameterCollection parameterValues)+743
System.Data. Objects.ObjectQuery1.GetResults(Nullable1 forMergeOption)+157
System.Data.Objects.ObjectQuery`1.GetIListSourceListInternal()+ 13 System.Data.Objects.ObjectQuery.System.ComponentModel.IListSource.GetList()+ System.Web.UI.WebControls. …
我的数据库中有两个表 - 类别和部门,它们都包含相同的列 - ID,名称和代码.
我可以使用Visual Studio 2008设计器创建一个新的实体模型并添加部门,它工作正常 - 我可以使用LINQ查询数据库,一切都很好.
当我更新模型并添加Category表时,生成的代码在我尝试编译时会抛出以下错误.
The type 'DBContexts.Category' already contains a definition for 'ID'
The type 'DBContexts.Category' already contains a definition for '_ID'
The type 'DBContexts.Category' already contains a definition for 'Name'
The type 'DBContexts.Category' already contains a definition for '_Name'
A partial method may not have multiple defining declarations
Run Code Online (Sandbox Code Playgroud)
我想这与Department和Category具有相同的列名这一事实有关 - 但它不会导致Code列出现问题.
我有什么想法可以解决这个问题?我不能真正搞乱生成的代码,因为如果我更新模型,任何更改都将被删除.
干杯
entity-model ×11
c# ×4
.net ×2
ado.net ×2
annotations ×1
edmx ×1
hibernate ×1
java ×1
jpa ×1
linq ×1
linq-to-sql ×1
mysql ×1