I am using ASP.NET MVC 3
and Entity Framework code first CTP 5
. I was wondering if it is possible to add additional properties that is not mapped to a table column?
I haved a News class and it is defined as such:
public class News : Entity
{
public int NewsId { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public bool Active { get; set; }
}
My database context class:
public class MyContext : DbContext
{
public DbSet<News> Newses { get; set; }
}
In the entity class I have a property defined like:
public IList<RuleViolation> RuleViolations { get; set; }
I have not code this part yet, but I want all broken rules to be added to this list when the object is validated. The error that I am getting is:
One or more validation errors were detected during model generation:
System.Data.Edm.EdmEntityType: : EntityType 'RuleViolation' has no key defined. Define the key for this EntityType.
System.Data.Edm.EdmEntitySet: EntityType: The EntitySet RuleViolations is based on type RuleViolation that has no keys defined.
Here is my reposity code:
public News FindById(int newsId)
{
return context.Database.SqlQuery<News>("News_FindById @NewsId",
new SqlParameter("NewsId", newsId)).FirstOrDefault();
}
UPDATE 2011-03-02:
Here is my Entity
class:
public class Entity
{
public IList<RuleViolation> RuleViolations { get; set; }
public bool Validate()
{
// Still needs to be coded
bool isValid = true;
return isValid;
}
}
Here is my RuleViolation
class:
public class RuleViolation
{
public RuleViolation(string parameterName, string errorMessage)
{
ParameterName = parameterName;
ErrorMessage = errorMessage;
}
public string ParameterName { get; set; }
public string ErrorMessage { get; set; }
}
Here is my context class:
public class MyContext : DbContext
{
public DbSet<News> Newses { get; set; }
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<News>().Ignore(n => n.RuleViolations);
}
}
In this situation you can upgrade to EF5 using the following steps: Select Tools -> Library Package Manager -> Package Manager Console. Run Install-Package EntityFramework -version 5.0. 0.
Technically, EF Core 5 can run on . NET Core 3.1, but aligning versions is always a good idea. Starting with a brand new console application, we will need to install the following packages, making sure that all the versions are 5.0.
An Entity can include two types of properties: Scalar Properties and Navigation Properties. Scalar Property: The type of primitive property is called scalar properties. Each scalar property maps to a column in the database table which stores the real data.
You can ignore the type using Fluent API by adding an ignore rule to your OnModelCreating
method of your MyContext
class
public class MyContext : DbContext {
public DbSet<News> Newses { get; set; }
protected override void OnModelCreating(ModelBuilder builder) {
builder.Ignore<RuleViolation>()
}
}
Or you can ignore the property by using the NotMapped
attribute
public class Enitity {
[NotMapped]
public IList<RuleViolation> RuleViolations { get; set; }
//other properties here
}
and then Entity Framework will ignore the property.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With