我在实体模型中添加了新属性,因为新列已添加到数据库表中。但是在该列中可能存在或可能存在于其他客户端数据库中。那么,如何处理呢?我试过modelBuilder.Entity<Customer>().Ignore(customer => customer.FullName);
但它没有忽略实体中的属性。因为我们有实体映射类,所以它不会忽略它。请问解决方法?
问问题
3169 次
3 回答
1
如果添加 [NotMapped] 属性,实体框架将不会为其创建列。
using System.ComponentModel.DataAnnotations.Schema;
namespace DomainModel
{
public partial class Customer
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public string FullName { get; set; }
}
}
或者,如果您想映射该列,但在某些数据库中它已经存在,那么这里有一个迁移,它只会在该列不存在时添加该列。
namespace DataAccess.Migrations
{
using System;
using System.Data.Entity.Migrations;
public partial class AddFullNameToCustomer : DbMigration
{
public override void Up()
{
Sql(@"IF COL_LENGTH('Customer', 'FullName') IS NULL
BEGIN
ALTER TABLE Customer
ADD [FullName] varchar(200) null
END");
}
public override void Down()
{
}
}
}
于 2020-10-08T13:48:22.690 回答
1
add你需要使用System.ComponentModel.DataAnnotations.Schema添加[NotMapped]属性;
namespace DomainModel
{
public partial class Customer
{
public int Id { get; set; }
public string Name { get; set; }
[NotMapped]
public string FullName { get; set; }
}
}
有些人更喜欢模型类非常干净——没有任何数据注释。他们更喜欢配置DataContext类来完成。您可以对类属性使用 Ignore 方法来防止它映射到数据库列。
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Customer>().Ignore(customer => customer.FullName);
base.OnModelCreating(modelBuilder);
}
于 2020-10-18T02:26:31.170 回答
0
停下来吧。你正在为自己创造一个痛苦的世界。
如果你想拥有一个动态模式,那么你根本不应该使用实体框架。
通过创建一个迁移来简化和避免所有这些令人头疼的问题,该迁移可确保在每个数据库中创建字段(以便在运行时,上下文将始终与数据库匹配)并确保在应用程序运行之前执行迁移。
于 2020-10-19T00:15:45.253 回答