标签: ef-code-first

EF 4.1 Code First和现有数据库和.NET成员

我在我的开发框上有一个名为ApplicationName_Development的数据库在SQL Server 2008 R2 Developer Edition上运行.

我没有问题地将.NET成员资格表添加到数据库中.当我试图让Code First工作时,我收到以下错误消息:

服务器遇到处理请求的错误.异常消息是"无法检查模型兼容性,因为数据库不包含模型元数据.请确保已将IncludeMetadataConvention添加到DbModelBuilder约定中.

经过一些谷歌搜索,我发现我必须删除数据库,让EF创建数据库.这没关系,但我丢失了所有的.NET会员表.我可以返回并再次添加成员资格表,但如果我的模型更改并且EF需要重新创建数据库,那么我必须再次添加成员资格表.

我该如何解决这个问题?

ef-code-first entity-framework-4.1

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

Linq To Entities - 任何VS First VS存在

我正在使用实体框架,我需要检查名称="xyz"的产品是否存在...

我想我可以使用Any(),Exists()或First().

对于这种情况,哪一个是最好的选择?哪一个性能最好?

谢谢,

米格尔

entity-framework exists any ef-code-first

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

EF 4.1,Code-First:有没有简单的方法来删除所有约定?

我们可以这样删除单个约定:

modelBuilder.Conventions.Remove<PluralizingTableNameConvention>();
modelBuilder.Conventions.Remove<ConcurrencyCheckAttributeConvention>();
// and 31 conventions more
Run Code Online (Sandbox Code Playgroud)

但我想念一些类似的东西modelBuilder.Conventions.RemoveAll().是否有一种简单的方法可以删除所有这些?

(我甚至不确定我是否真的想要最终删除所有约定.但是随着我不断增长的对象模型,我很难清楚地区分映射到DB的哪些部分来自约定以及我确实在Fluent中明确配置了哪些部分API.我认为目前我混合使用纯粹的基于约定的映射,明确覆盖的约定和明确重现的约定.至少出于学习目的和对映射的清晰理解,能够关闭所有约定会很好.)

.net entity-framework ef-code-first entity-framework-4.1

14
推荐指数
1
解决办法
4154
查看次数

EF Code First不为ICollection <string>生成表

我想在我的一个数据类中使用以下ICollection属性(让我们称之为"Foo")

public class Foo
{
    [Key]
    public int FooId { get; set; }
    public string SomeValueOrOther { get; set; }
    public virtual ICollection<string> AllowedBars { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

我可以在使用实体上下文时添加字符串值,但它们不会"去任何地方".换句话说,没有生成表来表示此关系,因此不会保存任何值.我期望的是一个包含两列的表,一个用于"FooId",一个用于"AllowedBar",EF用于将其自动映射到集合(与复杂类型一样).

由于没有发生这种情况,我必须使用上面描述的两个属性创建一个名为"FooAllowedBar"的类.

这让我很不高兴,因为它是我在整个项目中唯一的"连接"类型.当然,它可以工作,所以一个方框被勾选,但有没有人知道如何让EF为字符串集合关系生成一个表?(或int,或datetime等)

很可能,从EF上的小信息(仍然!),这种功能尚未得到支持.我想接近一个确定的答案.

非常感谢,Rob

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

14
推荐指数
1
解决办法
5547
查看次数

实体框架代码首先查找vs SingleOrDefault(Eager Loading)

我正在使用Entity Framework 4.2(代码优先)来访问我的数据库.我假设如果我查询使用SingleOrDefault它的实体只会查询数据库是否实体尚未被跟踪,但事实并非如此.Find另一方面,该方法似乎确实这样做了.问题Find是它似乎不允许我加载相关数据.

有没有办法使用该Find方法,但也急切加载数据?例如,我想加载一本书及其所有评论:

// Load book from the database
Book book = context.Books.Find(1); 
context.Entry<Book>(book).Collection<Review>.Load(); // Book.Reviews is now populated

// Load book from the change tracker
// This will include all Reviews as well
Book book2 = context.Books.Find(1);
Run Code Online (Sandbox Code Playgroud)

随着SingleOrDefault我可以加载评论时,我得到使用包括书:

// Load book + reviews from the database
Book book = Book.Include("Reviews").SingleOrDefault(b => b.Id == 1);

// Doing the same thing again requeries the database
Book book2 = Book.Include("Reviews").SingleOrDefault(b => …
Run Code Online (Sandbox Code Playgroud)

c# entity-framework ef-code-first

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

首先是EF代码 - 自定义外键约束名称

我想知道在使用代码时是否有机会更改Entity Framework生成的外键约束的名称.

我有两个实体 - UserGroup- 具有多对多关系,因此有一个关联表GroupUser.不幸的是,自动生成的外键约束被命名为FK_dbo.GroupUser_dbo.User_User_UserIdFK_dbo.GroupUser_dbo.Group_Group_GroupId.

我想有外键约束称为FK_GroupUser_UserIdFK_GroupUser_GroupId.这对我来说看起来更干净.

ef-code-first entity-framework-5

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

如何在Entity Framework 6中禁用模型缓存(Code First方法)

MSDN文档之后我们可以阅读:

然后缓存该上下文的模型,该模型适用于app域中上下文的所有其他实例.可以通过在给定的ModelBuidler上设置ModelCaching属性来禁用此缓存,但请注意,这会严重降低性能.

问题是模型构建器不包含任何名为ModelCaching的属性.

如何禁用模型缓存(例如,在运行时更改模型配置)?

c# caching ef-code-first entity-framework-6 ef-model-builder

14
推荐指数
2
解决办法
4443
查看次数

将EF6 Code First字符串流畅地设置为nvarchar(max)

我正在使用流畅的API构建EF6代码第一个模型.我的理解是,默认情况下,字符串将是nvarchar(max),对于默认值,它(直言不讳)是愚蠢的.所以我添加了以下约定代码来将max default length设置为255个字符:

        modelBuilder.Properties<string>()
            .Configure(p => p.HasMaxLength(255));
Run Code Online (Sandbox Code Playgroud)

然后我创建了一个像这样的装饰器:

[AttributeUsage(AttributeTargets.Property, AllowMultiple = false, Inherited = true)]
public class TextAttribute : Attribute
{
}
Run Code Online (Sandbox Code Playgroud)

我想将此应用于我实际想要成为NVARCHAR(MAX)的特定字符串属性.

我应该在流畅的API中放置什么来确保使用[Text]装饰器的所有字符串属性都是在带有NVARCHAR(MAX)的数据库中构建的?我假设它会是这样的:

        modelBuilder.Properties<string>()
            .Where(p => p.CustomAttributes.Any(a => typeof(TextAttribute).IsAssignableFrom(a.AttributeType)))
            .Configure(p => p.HasMaxLength(?????));
Run Code Online (Sandbox Code Playgroud)

或者我这样做完全错了?

c# entity-framework ef-code-first ef-fluent-api

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

如何在EntityFramework Codefirst中以编程方式使用迁移?

我正在使用EF Code First的项目.我正在尝试使用迁移功能.我不想使用Package Console Manager.如何以编程方式执行"添加迁移"和"更新数据库"?

add-migration TestMigration01 -force

update-database
Run Code Online (Sandbox Code Playgroud)

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

14
推荐指数
1
解决办法
8400
查看次数

EF Core的HasColumnName发生了什么变化?

所以我试图将内部属性映射到我的数据库,根据这篇文章在线,这是你应该怎么做的.我发现的其他资源也告诉我做同样的事情.无论出于何种原因,该方法都不存在,我无法在线查找他们重命名的内容,或者他们是否删除了该方法.

这是我的代码:

public class Criteria : DbEntity
{

    internal string _Condition { get; set; }

    [NotMapped]
    public Condition Condition 
    {
        get
        {
            return string.IsNullOrEmpty(_Condition) ? null : JsonConvert.DeserializeObject<Condition>(_Condition);
        }
        set
        {
            _Condition = JsonConvert.SerializeObject(value);
        }
    }

}

protected override void OnModelCreating(ModelBuilder builder)
{
    builder.Entity<Criteria>().Property(b => b._Condition);//.HasColumnName("Condition"); <-- this doesn't exist...
}
Run Code Online (Sandbox Code Playgroud)

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

14
推荐指数
1
解决办法
3773
查看次数