标签: ef-code-first

如何在EF Code First中单独表格?

在命名我的数据库表时,我更喜欢使用单数名词.但是,首先在EF代码中,生成的表总是复数.我的DbSets是多元化的,我相信是EF生成名称的地方,但我不想将这些名称单一化,因为我认为在代码中使用复数更为实际.我也尝试重写设置,但无济于事.

有任何想法吗?这是我的代码和谢谢.

MyObjectContext.cs

public class MyObjectContext : DbContext, IDbContext
{
     public MyObjectContext(string connString) : base(connString)
     {
     }
     public DbSet<Product> Products {get;set;}
     public DbSet<Category> Categories {get;set;}
     //etc.

     protected override void OnModelCreating(ModelBuilder modelBuilder)
     {
        modelBuilder.Conventions.Remove<PluralizingEntitySetNameConvention>();
     }
}
Run Code Online (Sandbox Code Playgroud)

entity-framework ef-code-first

56
推荐指数
1
解决办法
3万
查看次数

找出实体是否附加到dbContext的最合理方法是什么?

当我尝试将实体附加到上下文时,我得到一个例外

ObjectStateManager中已存在具有相同键的对象.ObjectStateManager无法使用相同的键跟踪多个对象

这是预期的行为.

但我想知道ObjectStateManager是如何知道的?我之前想自己做这个检查

c# entity-framework-4 ef-code-first

56
推荐指数
3
解决办法
3万
查看次数

如何在EF6 Code First中创建与枚举对应的表?

我已经跟踪MSDN如何处理EF6的Code First中的枚举.它起作用,但是在创建的表中引用枚举器的字段是一个简单的int.

我更喜欢生成第二个表,其值将遵循C#代码中枚举数的定义.因此,我不想仅在MSDN上的示例中获取与Department对应的表,而是还希望看到由Faculty中的项填充的第二个表.

public enum Faculty { Eng, Math, Eco }     

public partial class Department 
{ 
  [Key] public Guid ID { get; set; } 
  [Required] public Faculty Name { get; set; } 
}
Run Code Online (Sandbox Code Playgroud)

在研究这个问题时,我偶然发现了一个解决方案,它建议为枚举创建一个表并通过种子显式填充它.

在我看来,这是一种繁琐的方法和许多应该自动处理的工作.毕竟,系统知道构成枚举的实际值.从数据库的角度来看,它仍然是数据行,就像我创建的实体一样,但从OO方面来说,它实际上并不是一个数据 - 而是一种类型(松散表达),它可以假设一个有限的和预先知道的状态数.

是否建议"手动"填充表格的方法?

c# enums entity-framework ef-code-first entity-framework-6

55
推荐指数
5
解决办法
4万
查看次数

如何强制实体框架插入标识列?

我想编写一些C#代码来使用一些种子数据初始化我的数据库.显然,这需要能够在插入时设置各种Identity列的值.我正在使用代码优先的方法.默认情况下,DbContext处理数据库连接,因此您不能SET IDENTITY_INSERT [dbo].[MyTable] ON.所以,到目前为止我所做的是使用DbContext构造函数,它允许我指定要使用的数据库连接.然后,我设置IDENTITY_INSERTON该数据库的连接,然后尝试使用实体框架插入我的记录.这是我到目前为止所得到的一个例子:

public class MyUserSeeder : IEntitySeeder {
    public void InitializeEntities(AssessmentSystemContext context, SqlConnection connection) {
        context.MyUsers.Add(new MyUser { MyUserId = 106, ConceptPersonId = 520476, Salutation = "Mrs", Firstname = "Novelette", Surname = "Aldred", Email = null, LoginId = "520476", Password="28c923d21b68fdf129b46de949b9f7e0d03f6ced8e9404066f4f3a75e115147489c9f68195c2128e320ca9018cd711df", IsEnabled = true, SpecialRequirements = null });
        try {
            connection.Open();
            SqlCommand cmd = new SqlCommand("SET IDENTITY_INSERT [dbo].[MyUser] ON", connection);
            int retVal = cmd.ExecuteNonQuery();
            context.SaveChanges();
        }
        finally {
            connection.Close(); …
Run Code Online (Sandbox Code Playgroud)

database sql-server asp.net entity-framework ef-code-first

54
推荐指数
5
解决办法
7万
查看次数

MapKey与HasForeignKey的区别 - 流利的Api

实际上有什么区别:

this.HasRequired(a => a.Something)
    .WithMany()
    .Map(a => a.MapKey("SomethingId"));
Run Code Online (Sandbox Code Playgroud)

this.HasRequired(a => a.Something)
    .WithMany()
    .HasForeignKey(a => a.SomethingId);
Run Code Online (Sandbox Code Playgroud)

entity-relationship entity-framework ef-code-first

54
推荐指数
1
解决办法
2万
查看次数

如何在Code First中指定数据库名称?

如何告诉EF如何命名数据库以及将其放在何处?

如果Web.Config中没有连接字符串,它会尝试将其放在本地SQLEXPRESS服务器中,但我想将它放在已知的SQL Server上,并将其命名为我想要的.有什么建议?

entity-framework-4 ef-code-first

53
推荐指数
5
解决办法
5万
查看次数

CodeFirst EF4.1 MVC针对遗留数据库 - 多重性冲突

无论我把它混合在一起,都会给我带来错误.我有一种感觉,我错过了一些明显的东西,因为我不断收到这些错误.

在模型生成期间检测到一个或多个验证错误:

System.Data.Edm.EdmAssociationType :: Multiplicity与关系'Venue_Courses'中Role'Venue_Courses_Source'中的引用约束冲突.由于"从属角色"中的所有属性都是不可为空的,因此"主体角色"的多重性必须为"1".

System.Data.Edm.EdmAssociationEnd :: Multiplicity在关系'Venue_Courses'中的角色'Venue_Courses_Target'中无效.由于"从属角色"是指关键属性,因此从属角色的多重性的上限必须为1.

一个课程只能有一个场地,许多课程都可以使用场地

public class Course
{
    [Key]
    public virtual int Id { get; set; }
    public string Title { get; set; }
    public DateTime StartDate { get; set; }
    public int VenueId { get; set; }

    public virtual Venue Venue { get; set; }
}

public class Venue
{
    [Key]
    public int Id { get; set; }
    public string Name { get; set; }

    public virtual ICollection<Course> Courses { get; set; }
} …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first asp.net-mvc-3

53
推荐指数
1
解决办法
2万
查看次数

逆向工程数据库时改进导航属性名称

我正在使用带有Entity Framework Power Tools Beta 2的Visual Studio的Entity Framework 5来反向设计中等大小的数据库(~100个表).

不幸的是,导航属性没有有意义的名称.例如,如果有两个表:

CREATE TABLE Contacts (
    ContactID INT IDENTITY (1, 1) NOT NULL,
    ...
    CONSTRAINT PK_Contacts PRIMARY KEY CLUSTERED (ContactID ASC)
}

CREATE TABLE Projects (
    ProjectID INT IDENTITY (1, 1) NOT NULL,
    TechnicalContactID INT NOT NULL,
    SalesContactID INT NOT NULL,
    ...
    CONSTRAINT PK_Projects PRIMARY KEY CLUSTERED (ProjectID ASC),
    CONSTRAINT FK_Projects_TechnicalContact FOREIGN KEY (TechnicalContactID)
        REFERENCES Contacts (ContactID),
    CONSTRAINT FK_Projects_SalesContact FOREIGN KEY (SalesContactID)
        REFERENCES Contacts (ContactID),
    ...
}
Run Code Online (Sandbox Code Playgroud)

这将生成如下类:

public class …
Run Code Online (Sandbox Code Playgroud)

t4 entity-framework ef-code-first entity-framework-5 ef-power-tools

53
推荐指数
2
解决办法
1万
查看次数

实体框架,代码优先和全文搜索

我意识到有很多关于全文搜索和实体框架的问题,但我希望这个问题有点不同.

我正在使用Entity Framework,Code First,需要进行全文搜索.当我需要执行全文搜索时,我通常还会有其他条件/限制 - 例如跳过前500行,或过滤其他列等.

我看到这是使用表值函数处理的 - 请参阅http://sqlblogcasts.com/blogs/simons/archive/2008/12/18/LINQ-to-SQL---Enabling-Fulltext-searching.aspx.这似乎是正确的想法.

不幸的是,在实体框架5.0之前不支持表值函数(我认为,即使这样,它们也不支持Code First).

我真正的问题是,对于实体框架4.3和实体框架5.0,最佳处理方式的建议是什么.但具体来说:

  1. 除了动态SQL(System.Data.Entity.DbSet.SqlQuery例如,通过),Entity Framework 4.3是否有可用的选项?

  2. 如果我升级到Entity Framework 5.0,有没有办法可以首先使用表值函数和代码?

谢谢,埃里克

linq full-text-search entity-framework ef-code-first

52
推荐指数
3
解决办法
3万
查看次数

实体框架(EF)代码优先级联删除一对一或零关系

Julie LermanPluralsight"Entity Framework 5入门"课程的"Code First Modeling"部分之后,我创建了两个POCO类,其中包含一对一或零关系:父(User)和可选孩子(UserDetail).

User和UserDetail数据模型图(点击查看).

请注意,图中UserId属性是UserDetail的主键和外键.

相关代码:

public class User
{
    //...

    [Key]
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)]
    public int UserId { get; set; }

    /* Has a 1:0..1 relationship with UserDetail */
    public virtual UserDetail UserDetail { get; set; }

    //...
}

public class UserDetail
{
    //...

    /* Has a 0..1:1 relationship with User */
    public virtual User User { get; set; }

    [Key, ForeignKey("User")]
    public int UserId { get; set; …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework cascading-deletes ef-code-first entity-framework-5

52
推荐指数
2
解决办法
10万
查看次数