Как создать свойства, не сохраняемые с помощью codefirst EF4?Как не персистировать свойство EF4 кода?
MS говорит, что есть атрибут StoreIgnore, но я не могу его найти.
Есть ли способ, чтобы установить это с помощью EntityConfiguration?
Как создать свойства, не сохраняемые с помощью codefirst EF4?Как не персистировать свойство EF4 кода?
MS говорит, что есть атрибут StoreIgnore, но я не могу его найти.
Есть ли способ, чтобы установить это с помощью EntityConfiguration?
В EF Code First-CTP5, вы можете использовать [NotMapped]
аннотацию.
using System.ComponentModel.DataAnnotations;
public class Song
{
public int Id { get; set; }
public string Title { get; set; }
[NotMapped]
public int Track { get; set; }
Я получаю ошибку времени компиляции, если я пытаюсь использовать этот атрибут. Не определен. Какая ссылка и «использование» нам нужно для этого? – ProfK
Возможно, вам потребуется добавить ссылку на System.ComponentModel.DataAnnotations.dll и использовать System.ComponentModel.DataAnnotations; Я обновил свой пост с помощью примера кода. –
Я столкнулся с ошибкой, когда у меня появилась ссылка на System.ComponentModel.DataAnnotations.dll, а затем добавлена ссылка на EntityFramework.dll. Атрибут NotMapped не может быть разрешен. Удаление и повторное добавление ссылки System.ComponentModel.DataAnnotations.dll позволило решить проблему. Произошло в VS2010 SP1. –
Я не уверен, что это еще доступно.
На этой MSDN page Игнорировать атрибутов и API описаны, но ниже, в комментариях, кто-то пишет на 4 июня 2010 года:
Вы сможете игнорировать свойства в следующем Код первого выпуска,
Ничего себе, это похоже на огромное целое в кодовой истории. для первых объектов кода будет сложно составить богатую модель домена, если они не могут содержать данные как свойства, которые не являются непосредственно строкой в базе данных. –
Проблема в том, что код сначала еще не RTM, а только CTP, поэтому на данный момент это только для оценки не для использования в производстве. –
В то же время создайте дополнительные «свойства» как методы, а не свойства, поскольку они не сохраняются. Затем вы можете продолжить разработку кода против соответствующих объектов. Как только атрибут StoreIgnore доступен, его простая задача - вернуться к свойству и обновить все ссылки. – Clicktricity
В настоящее время я знаю два способа сделать это.
Добавьте «динамического» ключевое слова к свойству, которое останавливает картограф сохраняющимся его:
private Gender gender;
public dynamic Gender
{
get { return gender; }
set { gender = value; }
}
Override OnModelCreating в DbContext и переназначить весь тип, опуская свойства, которые вы не хотите упорствовать:
protected override void OnModelCreating(System.Data.Entity.ModelConfiguration.ModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<Person>().MapSingleType(p => new { p.FirstName, ... });
}
Используя метод 2, если команда EF ввести Игнорируйте, вы будете возможность легко изменить код:
modelBuilder.Entity<Person>().Property(p => p.IgnoreThis).Ignore();
Мой ответ был отменен @Matt. –
Если вы не хотите использовать аннотации, вы можете использовать Fluent API. Переопределите OnModelCreating
и используйте метод Ignore()
DbModelBuilder. Предположим, что вы есть 'Song' лицо:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Entity<Song>().Ignore(p => p.PropToIgnore);
}
}
Вы также можете использовать EntityTypeConfiguration для move configurations to separate classes для лучшей управляемости:
public class MyContext : DbContext
{
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
modelBuilder.Configurations.Add(new SongConfiguration());
}
}
public class SongConfiguration : EntityTypeConfiguration<Song>
{
public SongConfiguration()
{
Ignore(p => p.PropToIgnore);
}
}
Добавить используя System.ComponentModel.DataAnnotations. Схема к классу модели. (Должен включать «SCHEMA»)
Добавить [NotMapped] аннотацию данных к полям, которые вы хотите сохранить от сохранения (т.е. не сохранять в базе данных).
Это предотвратит их добавление в качестве столбца таблицы в db.
Обратите внимание: предыдущие ответы могут включать эти биты, но у них не было полного предложения «использование». Они просто остановили «схему» - в которой определяется атрибут NotMapped.
+1 действительно хороший вопрос. –
Любое обновление по этому вопросу?Я использую VS2010 с выпущенным EF4.0, и я все еще не могу найти StoreIgnoreAttribute. Он упал? –