Ash*_*pta 6 code-first entity-framework-4
我的实体名称是"联系人",我的表名是"联系人".但是,默认的复数支持是使EF4查找名为"Contacts"的表.有人知道如何关闭多元化支持吗?
这篇文章有关于多元化支持的一些细节.但仍然没有给我一个答案.
我在这篇文章中看到了以下文字.首先,我不知道我需要哪个物理.tt文件进行此更改.此外,我希望仅为一个应用程序而不是所有应用程序关闭此功能.
T4 Toolbox中的代码生成器默认情况下在Visual Studio 2010中打开了复数.如果您需要生成DAL而不进行复数化,可能出于兼容性原因,您可以通过在.tt文件中添加以下行来关闭此选项调用generator.Run()方法.
C#
generator.Pluralize = false;VB
generator.Pluralize = False
*****UPDATE*****
以下是我使用的代码,我得到一个错误如下: -
联系
public class Contact
{
public int ContactID { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
public string Title { get; set; }
public DateTime AddDate { get; set; }
public DateTime ModifiedDate { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
语境: -
public class AddressBook : DbContext
{
public DbSet<Contact> Contact { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<Contact>().MapSingleType().ToTable("dbo.Contact");
}
Run Code Online (Sandbox Code Playgroud)
}
主要方案: -
using (var context = new AddressBook())
{
var contact = new Contact
{
ContactID = 10000,
FirstName = "Brian",
LastName = "Lara",
ModifiedDate = DateTime.Now,
AddDate = DateTime.Now,
Title = "Mr."
};
context.Contact.Add(contact);
int result = context.SaveChanges();
Console.WriteLine("Result :- " + result.ToString());
}
Run Code Online (Sandbox Code Playgroud)
我在"context.Contact.Add(contact);"上收到以下错误: -
System.InvalidOperationException:自创建数据库以来,支持"AddressBook"上下文的模型已更改.手动删除/更新数据库,或使用IDatabaseInitializer实例调用Database.SetInitializer.例如,RecreateDatabaseIfModelChanges策略将自动删除并重新创建数据库,并可选择使用新数据对其进行种子设定.在System.Data.Entity.Infrastructure.CreateDatabaseOnlyIfNotExists
1.InitializeDatabase(TContext context) at System.Data.Entity.Infrastructure.Database.Initialize() at System.Data.Entity.Internal.InternalContext.Initialize() at System.Data.Entity.Internal.InternalContext.GetEntitySetAndBaseTypeForType(Type entityType) at System.Data.Entity.Internal.Linq.EfInternalQuery1.Initialize()at System.Data.Entity.DbSet 1.Add(1.ActOnSet(Action action,EntityState newState, TEntity entity) at System.Data.Entity.DbSetTEntity entity)at CodeFirst.Client.Program.Main(String [] args)in E:\ Ashish\Research\VS Solutions\EntityFramework\CodeFirstApproach_EF_CTP4\CodeFirst.Client\Program.cs:第35行
我确信我在某个地方犯了一个愚蠢的错误,只是无法搞清楚.有人可以提供一些指示吗?
答案 在Pault的帮助下,我在这里描述了这个问题和解决方案.
我正在添加第三个答案,因为我对这个问题的理解发生了变化......对我来说是不是很糟糕?;)
就像我在评论中说的那样,我还在学习,但我还没有尝试使用现有的数据库.也就是说,希望其中一个有助于:
我在Scott Guthrie提到的帖子(http://weblogs.asp.net/scottgu/archive/2010/08/03/using-ef-code-first-with-an-existing-database.aspx)发表了评论某个杰夫说这可以提供帮助(我建议阅读完整的评论,因为他更详细地解释):
Database.SetInitializer<AddressBook>(null); //AddressBook being the context
Run Code Online (Sandbox Code Playgroud)
在最近的这篇文章(http://blogs.msdn.com/b/adonet/archive/2010/07/14/ctp4announcement.aspx?PageIndex=2)下,我也发生过Rowan Miller的评论.他建议这可能是一个选择:
public class ProductContext : DbContext
{
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.IncludeMetadataInDatabase = false;
}
...
}
Run Code Online (Sandbox Code Playgroud)
希望其中一个能让你走上正轨.
| 归档时间: |
|
| 查看次数: |
6899 次 |
| 最近记录: |